我的映射文件(相关数据) - 完整性约束违反: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