2012-12-19 76 views
4

我有一个一对多/多对一关系的一个问题:org.hibernate.AssertionFailure:具有空标识符一对多/多对一关系

类项目:

@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; 

只要有至少一个人连接到数据库中的项目,一切正常。如果我创建一个新的项目,也没有人在数据库中,我得到一个休眠例外:

org.hibernate.AssertionFailure: null identifier 

我已经设置为空的=真为项目类但这并不工作。想法任何人?

+0

只是一个想法..尝试FetchType.LAZY为您的设置 personList。 – Sikorski

+0

这给了我一个“未能懒惰地初始化一个角色集合:model.project.personlist”异常 – user1915440

回答

0

不知道这是否有助于尝试@ManyToOne(取= FetchType.LAZY,级联= CascadeType.ALL,可选= TRUE)

+0

这也不起作用 – user1915440

+0

@OneToMany(mappedBy =“project”,fetch = FetchType.LAZY) 私人设置 personlist = new HashSet ();然后在Person Calss @ManyToOne() @JoinColumn(name =“PROJECT_ID”) private project project; – justMe

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 .. * INGREDIENT 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抓取也应该没有错误地提取,然后我可以提供食物,如果它们碰巧是食谱中的成分,那么我会在我的物体中使用这些成分,并通过它他们所在的食谱。如果他们不是食材,只是食品本身,我仍然想要食物 - 这只是他们没有任何成分没有问题......但不能让他们,如果这是唯一的工作

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