org.hibernate.AssertionFailure:具有OneToMany / ManyToOne关系的null标识符

时间:2012-12-19 10:17:40

标签: hibernate hibernate-onetomany

我遇到OneToMany / ManyToOne关系问题:

班级项目:

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

班主任:

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

只要至少有一个人连接到数据库中的项目,一切都可以正常工作。如果我创建一个新项目并且数据库中没有人,我会得到一个hibernate异常:

org.hibernate.AssertionFailure: null identifier

我已经为项目类设置了nullable = true但这不起作用。任何想法?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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 fetch应该没有错误,然后我会有食物可用,如果它们恰好是食谱中的成分,那么我会在我的对象中提供这些成分,并通过它,他们所处的食谱。如果它们不是食材,只是食物本身,我仍然想要食物 - 只是它们没有相关的成分没有问题......但如果这是唯一的解决办法就不能拥有它们

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