4

I have a problem with a OneToMany/ManyToOne relationship:

Class Project:

@OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL,
orphanRemoval=true )
@JoinColumn(name="PROJECT_ID", nullable=true)
private Set<Person> personlist = new HashSet<Person>();

Class Person:

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "PROJECT_ID") 
private Project project;

Everything works fine as long as there is at least one person connected to a project in the database. If I create a new project and there is no person in the database I get an hibernate exception:

org.hibernate.AssertionFailure: null identifier

I already set nullable=true for the project class but this doesnt work. Ideas anyone?

4

2 回答 2

0

不确定这是否有助于尝试 @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = true)

于 2012-12-19T10:50:07.190 回答
0

我整天都在寻找解决这个问题的方法。我有一个解决方案/解决方法。

@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL,
orphanRemoval=true )
@JoinColumn(name="PROJECT_ID", nullable=true)
private Set<Person> personlist = new HashSet<Person>();

我对食物和配料也有类似的问题。

食物可以在不作为食谱成分的情况下存在。没有食物,成分就无法存在。所以我们在成分和食物之间有一对或多:

配方 1 ------------- 1..* 成分 0..* --------- 1 食物

请原谅上面的垃圾表示。我希望你能明白。

当下面的获取类型是 EAGER 时,我遇到了和你一样的问题。当它设置为懒惰时,我不会。

@NotFound(action = NotFoundAction.IGNORE)
@OneToMany(mappedBy = "food", // the VARIABLE NAME of this class in Ingredient
targetEntity = Ingredient.class, // The type that we have many of
fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<Ingredient> ingredients;

这不是一个很好的解决方案,只是一种解决方法。我认为 EAGER 提取应该没有错误地提取,即使没有任何东西可以提取,然后我会有可用的食物,如果它们恰好是食谱中的成分,那么我的对象中就会有这些成分可用,通过这个,他们所在的食谱。如果它们不是成分,只是它们自己的食物,我仍然想要这些食物 - 只是它们没有相关的成分没问题......但如果这是唯一的解决方法,就不能拥有它们

有没有人对此有更好的解决方案?如果你这样做,你可以在这里救我的命:-)

于 2013-12-05T19:53:31.820 回答