gpt4 book ai didi

java - JPA插入外键为空

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:37 25 4
gpt4 key购买 nike

我有 2 个实体,其中一个是另一个的外键:

@Entity
@Table(name = "XXXX")
@XmlRootElement
public class Drfacopt implements Serializable {
@Id
@NotNull
@Basic(optional = false)
@Column(name = "OPCOD")
private Short optionCode;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "OPCODDH")
private String optionCodeDescription;
}

@Entity
@Table(name = "YYYY")
@XmlRootElement
public class Drfac03f implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId
protected Drfac03fPK drfac03fPK;

@JoinColumn(name = "F3OPT", referencedColumnName = "OPCOD" )
@ManyToOne(optional = false)
private Drfacopt relationCode;
}

当我尝试使用 em.persist(drfac03f) 插入新记录时,出现此异常:

During synchronization a new object was found through a relationship that was not marked cascade PERSIST

如何将外键插入为空?我想要 @Null,这样当用户直接将记录插入到 Drfacopt 时,它不会为 null 或零,但如果是通过 Drfac03f 则可以将其插入为 null。如何做到这一点?

最佳答案

当您尝试 em.persist(myObj) 并收到错误时:

During synchronization a new object was found through a relationship that was not marked cascade PERSIST

这意味着您尝试保留的对象 (myObj) 有一个字段/属性(例如 foreignProperty),该字段/属性与 myObj 具有[外键]关系,并且 foreignPropertymyObj 之前都没有保留,也没有用 CascadeType.PERSIST 标记该关系,即, foreignProperty 在数据库中尚不存在

解决方案是保留之前foreignProperty,或者如上所述,设置关系CascadeType.PERSIST

How can I insert the foreign key as null?

由于您要将外部字段设置为 null,因此您之前不应该保留它(无需“保留”null 对象)。

因此,只需将字段设置为 null 并继续照常保留 myObj

I tried to persist, but got the error "Null values not allowed in column or variable ..."

此错误消息表明您正在尝试在无法保存的地方保存 null 值。有一些可能的原因:

  • 很可能数据库中的实际列是NOT NULL解决方案:将其设置为NULL
  • 关系标记为(可选 = false)。解决方案是将可选属性设置为true或将其完全删除。 (注意:这可能取决于实现,因此需要确认。)

关于java - JPA插入外键为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com