[英]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
之前还没有foreignProperty
被foreignProperty
,也没有用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.