首页 > 解决方案 > 由于@JoinColumn(nullable = false),Spring/JPA 两次单向不起作用

问题描述

我对单向映射有疑问,需要帮助。

我有 2 个具有相同单向映射的实体。

第一个:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "massnahme_id", nullable = false)
private Set<VerortungDAO> verortungen = new LinkedHashSet<>();

第二个:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "massnahmen_verbund_id", nullable = false)
private Set<VerortungDAO> verortungen = new LinkedHashSet<>();

如果我尝试保存一个实体,hibernate 会因为第二个实体定义(非空)而引发异常。

org.hibernate.PropertyValueException:非空属性引用空值或瞬态值

如果我将 JoinColumn 更改为 nullable = true,则单向映射不起作用并且列表不会保存在 DB 中。我该怎么做才能让它发挥作用?

标签: springhibernatejpaentityone-to-many

解决方案


使关联双向并映射到中的一对一关联VerortungDAO,或者如果您不希望这样做,至少映射 FK 列。如果您将其映射为双向,请使用@OneToMany(mappedBy = "..."). 无论哪种方式,您都必须初始化VerortungDAO对象上的两对一关联或 FK 列。

PS:实体不是 DAO(数据访问对象),因此xxDAO实体的命名相当混乱。


推荐阅读