【问题标题】:JPA ConstraintViolationException the forgein key as value nullJPA ConstraintViolationException 外键作为值 null
【发布时间】:2016-01-22 00:30:57
【问题描述】:

我通过 Hibernate 持久迁移到 JPA。 我用两个实体进行测试,当持久化一个实体时,我收到关于 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。

谢谢!!

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    尝试从Agente 类的azienda 属性中删除@Transient 注释。

    @Transient注解表示实体字段是不参与持久化的字段,其值永远不会存入数据库。

    【讨论】:

    • 除此之外,还要在@ManyToOne 注释上添加cascade=CascadeType.PERSIST
    【解决方案2】:

    我以不同的方式实现了@Transient 注释的功能...谢谢!!

    这是实体更改:

    @Entity
    @Table(name="AGENTE")
    public class Agente {   
    
        ...
    
        @JoinColumn(name="AGN_IDAZN", referencedColumnName="AZN_ID")
        @ManyToOne(cascade=CascadeType.PERSIST)
        private Azienda azienda;
    
        ...
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2023-03-07
      • 2023-03-10
      • 2011-08-14
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多