我的映射文件(相關數據) - 完整性約束違反:JPA一對多/多對一堅持 - 沒有找到父鍵
家長:
@Entity
@Table(name = "ATTRIBUTE_NAME", uniqueConstraints = @UniqueConstraint(columnNames = "NAME_TEXT"))
@SequenceGenerator(name="ATTRIBUTE_NAME_SEQ", sequenceName="ATTRIBUTE_NAME_SEQ", initialValue = 1, allocationSize = 1)
public class AttributeNameVo implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ATTRIBUTE_NAME_SEQ")
@Column(name = "ATTRIBUTE_ID", unique = true, nullable = false, precision = 6, scale = 0)
private int attributeId;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "attributeNameVo")
private Set<AttributeFunctionalUsageVo> attributeFunctionalUsageVos = new HashSet<AttributeFunctionalUsageVo>(0);
兒童:
@Entity
@Table(name = "ATTRIBUTE_FUNCTIONAL_USAGE")
public class AttributeFunctionalUsageVo implements Serializable {
@EmbeddedId
@AttributeOverrides({@AttributeOverride(name = "attributeId", column = @Column(name = "ATTRIBUTE_ID", nullable = false, precision = 6, scale = 0)),
@AttributeOverride(name = "functionalAreaCd", column = @Column(name = "FUNCTIONAL_AREA_CD", nullable = false, length = 5)) })
private AttributeFunctionalUsageIdVo id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "attributeId", referencedColumnName="ATTRIBUTE_ID", nullable = true, insertable = false, updatable = false)
private AttributeNameVo attributeNameVo;
然後我做in code(pseudo-code):
AttributeNameVo attr = new AttributeNameVo();
AttributeFunctionalUsageVo attrFunc = new AttributeFunctionalUsageVo();
attr.getAttributeFunctionalUsageVos().add(attrFunc);
attrFunc.setAttributeNameVo(attr);
在DAO:
em().persist(attr);
日誌結果表明:
select ATTRIBUTE_NAME_SEQ.nextval from dual
insert into ATTRIBUTE_NAME (ACTIVE_FL, DATE_CREATED, DATE_MODIFIED, DISPLAY_SEQ_NO, EXTERNAL_REF_ID, HINT_TEXT, LOV_FL, MAX_LENGTH, MAX_RANGE, MIN_RANGE, NAME_TEXT, POS_FL, PUBLIC_FL, RAPID_SEARCH_FL, REQUIRED_FL, TYPE_CD, USER_CREATED, USER_MODIFIED, ATTRIBUTE_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
insert into ATTRIBUTE_FUNCTIONAL_USAGE (DATE_CHANGED, DATE_CREATED, DATE_MODIFIED, USER_CREATED, USER_MODIFIED, ATTRIBUTE_ID, FUNCTIONAL_AREA_CD) values (?, ?, ?, ?, ?, ?, ?)
然後錯誤:
ORA-02291: integrity constraint (ATTR_FUNCTIONAL_USAGE_ATTRB_FK) violated - parent key not found
會在解決這個問題感激幫助。我已經嘗試了很多事情,但還沒有什麼...
基礎上的意見,嵌入ID的實體映射的問題是:
public class AttributeFunctionalUsageIdVo implements Serializable {
@Column(name = "ATTRIBUTE_ID", nullable = false, precision = 6, scale = 0)
private int attributeId;
如何界定EmbeddedId類?請提供它以更好地理解關係模型。 AttributeFunctionalUsageIdVo.id。'AttributeFunctionalUsageVo'實體中的attributeId字段對應於'AttributeNameVo'實體的主鍵? – wypieprz
我在上面的編輯中提供了AttributeFunctionalUsageIdVo類。 是的,它確實對應於AttributeFunctionalUsageVo表中的主鍵 – Pratik
只是爲了澄清不一致:1)實體中沒有AttributeListValueAllIdVo - 它應該是「AttributeFunctionalUsageIdVo」而不是? 2)僞代碼持久存在'AttributeVo' - 是否應該是'AttributeNameVo'? – wypieprz