我编写了自己的生成器来解决此问题。
public class UseExistingIdOtherwiseGenerateUsingIdentity extends IdentityGenerator { @Override public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException { Serializable id = session.getEntityPersister(null, object).getClassmetadata().getIdentifier(object, session); return id != null ? id : super.generate(session, object); }}并像这样使用它:(替换包名)
@Id@GenericGenerator(name = "UseExistingIdOtherwiseGenerateUsingIdentity", strategy = "{package}.UseExistingIdOtherwiseGenerateUsingIdentity")@GeneratedValue(generator = "UseExistingIdOtherwiseGenerateUsingIdentity")@Column(unique = true, nullable = false)protected Integer id;


