我遇到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但这不起作用。任何想法?
答案 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应该没有错误,然后我会有食物可用,如果它们恰好是食谱中的成分,那么我会在我的对象中提供这些成分,并通过它,他们所处的食谱。如果它们不是食材,只是食物本身,我仍然想要食物 - 只是它们没有相关的成分没有问题......但如果这是唯一的解决办法就不能拥有它们
有没有人有更好的解决方案呢?如果你这样做,你可以在这里挽救我的生命: - )