我有一个问题,当坚持一个实体和它的孩子在一对多的关系。这里我的两个实体:
@Entity
@Table(name="USER")
public class User implements Serializable {
...
@Id
@Column(name="ID_USER")
private String idUser;
@OneToMany(mappedBy="user", cascade=CascadeType.PERSIST)
private List<Address> address;
public List<Address> getAddress() {
return this.address;
}
public void setAddress(List<Address> address) {
this.address = address;
}
public Address addAddress(Address address) {
getAddress().add(address);
address.setUser(this);
return address;
}
public Address removeAddress(Address address) {
getAddress().remove(address);
address.setUser(null);
return address;
}
...
}
@Entity
@Table(name="ADDRESS")
public class Address implements Serializable {
...
@EmbeddedId
private AddressPK id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name="ID_USER", insertable=false, updatable=false, nullable=false)
private User user;
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
}
@Embeddable
public class AddressPK implements Serializable {
...
@Column(name="ID_USER", insertable=false, updatable=false)
private String idUser;
...
}
现在是生成ORA-02291错误的持久化操作:
User u = new User();
u.setAddress(new ArrayList<Address>());
u.set...
Address a1 = new Address();
a1.set...
u.addAddress(a1);
Address a2 = new Address();
a2.set...
u.addAddress(a2);
entityManager.persist(u);
有办法解决这个问题吗?
谢谢大家!
从昨天起我就陷入了这个困境,但现在我找到了解决问题的办法。在我的例子中,错误是因为我有触发器来设置我的_序列。下一步为其各自实体表的主键。
然后,解决方案将更改触发器以验证:new。实体的PK为空以设置它。相反,如果它不是空的,则可以理解该序列是由JPA设置为PK的。例如:
create or replace TRIGGER "MYSCHEMA"."TGR_MYTABLE_INSERT"
before insert on MYTABLE
for each row
begin
if :new.PK_MYTABLE is null then
select SEQ_MYTABLE.nextval
into :new.PK_MYTABLE
from dual;
end if;
end;
我认为您需要删除地址表中@JoinColumn to的name属性
@Entity
@Table(name="ADDRESS")
public class Address implements Serializable {
...
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(insertable=false, updatable=false)
private User user;
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
}
您已经从用户端获得了mappedBy=“user”。
我尝试按如下方式创建父表和子表: 我创建了两个程序来插入记录: 我已经创建了SSIS包来调用这两个过程。父记录插入成功。但是对于子表过程,我得到以下错误: “[Execute SQL Task]错误:执行查询”BEGIN GetSourceLogId(?,?输出);终止失败,出现以下错误:“违反了ORA-02291:完整性约束(PATIENTMDR.FK_SOURCELOG_PROCESSLOG)
我做了一些研究,有一个建议可以使用双重 但是现在我得到了ORA-06502/ORA-06512错误: ORA-06502:PL/SQL:erreur numérique ou erreur sur une valeur ORA-06512:àsys.xmltype“,ligne 272 ORA-06512:àligne 1 06502。00000-“PL/SQL:数值或值错误%s” *原因:出现算
我是Oracle SQL新手,我下载了Oracle SQL developer,它附带了一些您可能知道的预编程表。所以我选择了(Employees)表来练习我的Insert语句。我运行下面的脚本,我得到一个错误,纸条是 列的顺序如下: 错误是: 从命令中的第1行开始出错- 插入员工值(1000、'Anouar'、'Seljouki'、'Seljouki84@gmail.com,0662777081
问题内容: 我创建了一个触发器,如下所示: 我正在尝试在Trigger_1中插入一行 它给了我错误: 谁能帮忙吗? 问题答案: 只需删除 从触发代码。在正在进行的事务中触发执行,因此您无法进行单独的提交。提交事务后,您在trigger_2中的插入也将提交。
因此,我正在用Oracle编写一些代码,并建立了以下表格: 下载表连接用户和产品表,其中包含外键user_id和product_id。我正试图通过以下代码将数据插入下载表: Oracle然后给我以下错误: 错误报告-ORA-02291:完整性约束(BC29369.DOWNLOADS_FK2)违反-未找到父密钥。 我很清楚为什么我不应该把它作为我的首要关系。有人知道如何解决这个问题吗?提前谢谢你!
我正在创建一个表,我输入了这个命令: 我得到了这个错误: 有人能告诉我错误在哪里以及如何纠正吗?