我在基于Spring的webapp中使用Hibernate和Jpa2。
当我尝试保存多个实体时,我得到了一个乐观的锁异常,因为即使调用flush方法,第一个保存的实体Id也为null。
实际上它应该返回insert实体及其id作为hibernate doc状态。
实体主键由两个值组成,如下所示:
@Column(name = "tagId", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
Integer tagId;
@Column(name = "modelId", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
Integer modelId;
我认为这个问题与标签ID字段是自动生成的而不是“注入”的事实有关。作为modelId。
商店dao方法如下:
@Transactional
public Tag saveTag(Tag tag) {
Tag existingTag = tagDAO.findTagByPrimaryKey(tag.getTagId(), tag.getModelId());
if(existingTag != null){
if(existingTag != tag){
existingTag.setTagId(tag.getTagId());
existingTag.setModelId(tag.getModelId());
existingTag.setVersion(tag.getVersion());
existingTag.setName(tag.getName());
}
tag = tagDAO.store(existingTag);
}else{
tag = tagDAO.store(tag);
}
tagDAO.flush();
return tag;
}
建议?