当前位置: 首页 > 知识库问答 >
问题:

JPA ConstraintViolation异常forgein键作为值null

卢才艺
2023-03-14

我用HiberNate迁移到JPA持久化。我用两个实体进行测试,当持久化一个实体时,我会收到forgein键的值为空的约束违反的异常。

这是数据库表的结构:

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'not是null。

谢谢

共有2个答案

陈允晨
2023-03-14

我以另一种方式实现了@Transient annotation的功能。。。谢谢

这是实体更改:

@Entity
@Table(name="AGENTE")
public class Agente {   

    ...

    @JoinColumn(name="AGN_IDAZN", referencedColumnName="AZN_ID")
    @ManyToOne(cascade=CascadeType.PERSIST)
    private Azienda azienda;

    ...
 }
赫连彬炳
2023-03-14

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

@Transient注释意味着实体字段是不参与持久化的字段,它们的值永远不会存储在数据库中。

 类似资料:
  • 问题内容: 我有一个阵列几个月 现在,数组无法为键&输出正确的值。 尝试这样做,您将不会获得的任何键值和零键索引。 尽管我可以通过删除前导零来解决问题,但我还是想知道原因。 甚至PHP编辑器也发现了一些问题,但无法分辨出问题所在。 谢谢 问题答案: 在数字前加0表示PHP将其解析为八进制值,与在前缀0x之前将其解析为十六进制值的方式相同。删除零,它将正常工作。 在指定UNIX权限时,通常使用此命令

  • 有人能帮我解决正确连接2个流的问题吗,其中键和值为。首先,正如您所看到的,我用AVRO模式为键和值创建了两个主题。之后,我加入了两个流,在输出主题中,我创建了新的,一个所谓的带有投影模式的投影记录,我得到了如下代码片段所示的异常: StackTrace:

  • 问题内容: 我正在开发一类分析微量滴定板的课程。样本在单独的文件中描述,并且条目用于有序词典。关键之一是pH,通常以浮点数给出。例如6.8 我可以将其导入为十进制,以避免将浮点数作为dict键。另一种解决方案是将点替换为例如6p8之类的p或在我的样本描述中写入6p8,从而从一开始就消除了问题。但这会在以后引起麻烦,因为我无法在图中绘制6p8的pH值。 您将如何解决这个问题? 问题答案: 使用浮点数

  • 关于空间和时间关键帧插值 插值 是在两个已知值之间填充未知数据的过程。您可以设置关键帧以指定特定关键时间的属性值。After Effects 可为关键帧之间所有时间的属性插入值。 由于插值在关键帧之间 生成属性值,因此插值有时也称为补间。关键帧之间的插值可以用于对运动、效果、音频电平、图像调整、透明度、颜色变化以及许多其他视觉元素和音频元素添加动画。 创建关键帧和运动路径以使相关值随时间变化后,您

  • 我有这个JSON输入,我想通过jolt规范转换它 预期的输出应该是这样的 请问这可以通过 Jolt 实现吗?我已经尝试了几种可能性,但我对 Jolt 很陌生,到目前为止还没有成功

  • 问题内容: 我听说对控制流使用异常是不好的做法。你觉得这怎么样? 因此,如果未找到匹配项,则整数将为-1。当我尝试使用子字符串时,这将导致异常。然后,该函数仅返回一个对象,指示未找到匹配项。 这是不好的做法吗?我可以手动检查每个索引以查看它们是否都为-1,但这感觉需要更多工作。 更新 我已经删除了try-catch块,并用以下代码替换了它: 哪个更好:检查每个变量是否为-1,还是使用布尔值进行跟踪