【问题标题】:org.hibernate.AssertionFailure: null identifier with OneToMany/ManyToOne Relationshiporg.hibernate.AssertionFailure:具有 OneToMany/ManyToOne 关系的空标识符
【发布时间】:2012-12-06 16:02:14
【问题描述】:

我对 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;

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

org.hibernate.AssertionFailure: null identifier

我已经为项目类设置了 nullable=true 但这不起作用。有什么想法吗?

【问题讨论】:

  • 只是一个想法.. 为您的 Set personList 尝试 FetchType.LAZY。
  • 这给了我一个“无法延迟初始化角色集合:model.Project.personlist”异常

标签: hibernate hibernate-onetomany


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 怎么样@OneToMany(mappedBy = "project", fetch=FetchType.LAZY) private Set personlist = new HashSet();然后在 Person calss @ManyToOne() @JoinColumn(name = "PROJECT_ID") private Project project;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多