我迁移到 JPA 并与 Hibernate 保持一致。 我使用两个实体进行测试,当持久化一个实体时,我收到了 forgein 键的 null 值违反约束的异常。
这是数据库表的结构:
CREATE TABLE AZIENDA
(AZN_ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
...
CREATE TABLE AGENTE
(AGN_ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
AGN_IDAZN INTEGER NOT NULL,
...
CONSTRAINT FK_AGN_AZN FOREIGN KEY (AGN_IDAZN) REFERENCES AZIENDA (AZN_ID) ON DELETE CASCADE);
实体:
@Entity
@Table(name="AZIENDA")
public class Azienda {
@Column(name="AZN_ID")
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
...
@Entity
@Table(name="AGENTE")
public class Agente {
@Column(name="AGN_ID")
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="AGN_IDAZN")
@JoinColumn(name="FK_AGN_AZN", referencedColumnName="AZN_ID")
@ManyToOne()
// @ManyToOne(optional=true, cascade=CascadeType.PERSIST)
@Transient
private Azienda azienda;
...
首先从数据库中检索对象“Azienda”,然后创建一个新的“Agente”实体并设置属性“azienda”,当创建并保存新实体“Agente”时,我收到 ConstraintViolationExcpetion 列“AGN_IDAZN”可以'不包含 null 值,但实例 'Azienda' 不为 null。
谢谢!!
最佳答案
尝试从 Agente
类的 azienda
属性中删除 @Transient
注释。
@Transient
注解表示实体字段是不参与持久化的字段,其值永远不会存储在数据库中。
关于java - JPA ConstraintViolationException 外键值为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936983/