我的映射文件(相关数据):
起源:
@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;
然后我在代码中执行(伪代码):
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;
好的,出于临时目的,我已经解决了这个问题,方法是先进行持久化,然后刷新,以获得具有“id”的父记录。然后我循环遍历“持久化”记录中的子对象,并手动“设置”它对应的FK。
同样,这不是一个完美的解决方案,效率也很低,但它似乎已经成功了。。。如果有人能提出更优雅、更好的解决方案,我将不胜感激。如果我看到更好的东西,我会接受这个答案!
您的解决方案是必需的,因为您已经将属性的NameVo映射设置为只读(可插入=false,可更新=false),因此JPA需要检查可嵌入ID中属性的其他映射以设置其值。如果不使用值手动更新该字段,则插入发生时该字段为空,这就是失败的原因。
根据您使用的JPA版本,有许多选项。如果您必须使用JPA 1.0,您可以修改您的映射,以便属性NameVo是可写的,并且可嵌入的有中的映射是只读的(切换两个映射上的可插入、可更新的设置)。然后,JPA将从关系中拉出属性标识字段,忽略对嵌入标识字段的任何更改。这将导致它为空,除非您刷新或以其他方式从数据库中重新加载实体。
JPA2.0引入了其他选项,例如允许将关系标记为ID,甚至声明连接字段映射到ID字段。然后,您将使用:
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("attributeId")
private AttributeNameVo attributeNameVo;
其中“属性ID”是嵌入式ID中映射的名称。然后,JPA将在嵌入ID中设置属性ID值,并为您使用属性名称Vo的主键,以及正确处理插入。
我得到了“完整性约束(SYSTEM。FK_FACILITY)违反了父密钥未找到”错误,尽管主键在上一个表中已经明确定义。 我的确切错误是 我只想将值添加到表中,但我无法这样做。。。如果有人能帮我,那就太好了!
将实体插入数据库时遇到问题。我正在使用HibernateJPA。 我有表提醒和提醒行动和每个提醒将保持当前状态的提醒行动(即。OneToOne)和交易结束每个提醒将有许多提醒操作(具有不同的状态)。 在saveOrUpdate期间,hibernate从DB获取提醒和提醒操作的顺序 但是在flush()期间,Hibernate尝试首先插入ReminderAction,并且由于ReminderActi
SQL数据库代码: 大家好!我做了一系列的桌子,我想我做的每件事都是正确的。除了位置表之外,我在所有表上输入了输入值,没有任何问题。 这就是给我的错误。 第1行错误:ORA-02291:违反完整性约束(ASSIGNMENT.FK_TENANT)-未找到父密钥。 任何帮助和提示将不胜感激。谢谢! 固定的
所以这里是我的数据库: 插入表格: 批次表不断出现的错误是:ORA-02290:违反了检查约束(EJAY.batches\u DATE\u CHK) 学生表出现的错误是:ORA-02291:违反完整性约束-未找到父键 我感到困惑的是,它只显示在表格中的一些行。教职员工和课程都很好,只有这两个。如果答案很明显,我道歉,我是初学者。请帮帮忙
问题内容: 嗨,我正在Oracle SQL开发人员中开发数据库,试图从另一个表访问foriegn键。我目前正在使用以下CREATE语句创建的ItemOrdered表 如您所见,我具有以下前键Ords和BeltID。 现在,当我尝试运行以下语句时 它给了我以下错误 违反-找不到父密钥02291。00000-“违反完整性约束(%s。%s)-找不到父密钥” 如果需要,我已经提供了Ords CREAT
我试图为和创建会话,这两个表都与相同的外键关联到登录表-但是当我为创建种子时,我得到了错误,在我的另一个问题在这个链接中,我没有以最好的方式解释,但得到了一些关于使用(党-角色-关系模型)和这段代码下面他更多的想法有关已解决的问题链接 创建表和主键 创建表和主键 创建表以及主键和外键 使用表为管理员创建会话的过程: 使用表为用户创建会话的过程: 创建管理会话时,我收到一个错误 我做错了什么?