我的id和versionid的持久化类ProductVersionElement中有一个复合键。对于每个键,我有一个自定义的hibernate音序器作为IdGenerator和VersionIdGenerator。
@Id
@GenericGenerator(name = "custom_id", strategy = "com.model.persistent.sequencer.IdGenerator")
@GeneratedValue(generator = "custom_id")
protected String id;
@Id
@GenericGenerator(name = "custom_versionId", strategy = "com.model.persistent.sequencer.VersionIDGenerator")
@GeneratedValue(generator = "custom_versionId")
protected String versionId;
案例1.当id和versionid都为null时。然后,sequencer将填充两个字段的序列,并成功保存ProductVersionElement。保存后,在调试中显示两个字段的生成值。
情况2:设置id时(我事先知道该值并且只想生成versionid)并且versionid为null。为此,我更改了序列器,使得:如果field的值为null,则生成序列else返回相同的值。
if (id == null) {
//Generate the sequence and return
} else{
// return same id
}
在这种情况下,它不保存ProductVersionElement。即使在保存之后,它只显示id的值(已经设置),并且在保存后versionid仍为null。
虽然它不会导致任何异常,但在此之后我尝试保存另一个Object:ProductCharacteristics包含ProductVersionElement(以保存其中一个id)时,会导致以下错误:
org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.TransientPropertyValueException:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.orange.obsit.sando.cibinternational.model.persistent.ProductCharacteristic.productVersionElement - &gt ; com.orange.obsit.sando.cibinternational.model.persistent.ProductVersionElement;
你能就此提出任何建议吗?