我正在将Hibernate4升级到Hibernate5(Spring 4.3.7)(Spring-data-jpa 1.11.1)并面临使用JpaRepository.save(ownerObject)保存双向关联实体的问题。
以下是我的实体: -
DataType(所有者实体): -
@Entity
@Table(name = "DATATYPE")
public class DataType {
private List<DataFormat> mFormats;
public DataType() {
mFormats = new ArrayList<DataFormat>();
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "dataType")
public List<DataFormat> getFormats() {
return mFormats;
}
public void setFormats(List<DataFormat> formats) {
mFormats = formats;
}
}
DataFormat实体(反面): -
@Entity
@Table(name = "DATAFORMAT")
public class DataFormat {
private DataType mDataType;
public DataFormat() {
}
@ManyToOne
@ForeignKey(name = "DATATYPE_FK")
@JoinColumn(name = "DATATYPE_ID")
public DataType getDataType() {
return mDataType;
}
public void setDataType(DataType dataType) {
mDataType = dataType;
}
}
保存/保留实体: -
DataType dataType = dataTypeRepository.findOne("DATE_TIME");
if (dataType == null) {
dataType = new DataType();
}
final DataFormat customFormat = new DataFormat();
dataType.setDefaultFormat(customFormat);
dataTypeRepository.save(dataType);
这与Hibernate4完美配合,首先保存DataType,然后保存DataFormat。 但是对于Hibernate5,它首先尝试保存DataFormat(反面),然后在我的情况下导致错误,因为我的数据库有DataFormat拥有所有者引用的约束。
虽然我在 dataTypeRepository.save(dataType); 的地方保存这样的实体是有效的: -
entityManager.persist(dataFormat);
entityManager.persist(dataType);
这可能是什么问题。