hibernate5 JpaRepository保存不以双向关系保存实体

时间:2017-06-09 14:10:34

标签: entity-framework spring-data-jpa hibernate-4.x hibernate-5.x hibernate-entitymanager

我正在将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);

这可能是什么问题。

0 个答案:

没有答案