繁体   English   中英

JPA将外键插入为null

[英]JPA insert foreign key as null

我有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)插入新记录时, em.persist(drfac03f)此异常:

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

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

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

在同步期间,通过未标记为层叠PERSIST的关系找到了新对象

这意味着您要保留的对象( myObj具有myObj具有[外键]关系的字段/属性 (例如foreignProperty ),并且在myObj之前还没有foreignPropertyforeignProperty ,也没有用CascadeType.PERSIST标记该关系。是, 数据库中尚不存在foreignProperty

解决方案是在设置或设置关系CascadeType.PERSIST 之前持久foreignProperty

如何将外键插入为null?

由于要将外部字段设置为null ,因此您不应该在此之前将其持久保存(不需要“持久化”一个null对象)。

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

我试图坚持,但收到错误“ Null values not allowed in column or variable ...

此错误信息表明您试图将null值持久保存在您无法保存的地方。 有一些可能的原因:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM