当前位置: 首页 > 知识库问答 >
问题:

org . Hibernate . assertion failure:Hibernate @ OneToMany关系中的标识符为空

呼延沈义
2023-03-14

我在以下实体中有一个双向的@OneToMany / @ManyToOne关系:

@Entity
public class Item implements java.io.Serializable {

    // other columns including ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long itemId;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "packageId")
    private Package package;        
}

@Entity
public class Package {

    // other columns including ID
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(fetch = FetchType.EAGER, mappedBy="package", cascade = CascadeType.ALL)
    private Set<Item> items = new HashSet<Item>(0);
}    

假设最初有一个没有项目的包,当我试图通过其Id<code>packageRepository获取包时,将项目添加到该包中。findOne(packageId)(Spring-Data-JPA-code),我在那一行得到了下面的错误。

org.hibernate.AssertionFailure: null identifier
    at org.hibernate.engine.spi.EntityKey.<init>(EntityKey.java:69)
    at org.hibernate.internal.AbstractSessionImpl.generateEntityKey(AbstractSessionImpl.java:247)
    at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:794)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:707)

我认为Hibernate尝试了一个左外部联接,并发现itemId(ItemItementity的Id)为空。我确实需要有热情的人去那里。这个问题的解决方法是什么?当没有项目时,如何检索包?

共有1个答案

於德馨
2023-03-14

使用@NotFound注释:

@OneToMany(fetch = FetchType.EAGER, mappedBy="package", cascade = CascadeType.ALL)
@NotFound(action=NotFoundAction.IGNORE)
private Set<Item> items = new HashSet<Item>(0);
  • http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/annotations/NotFound.html

这可能不是解决你问题的最佳方法。Hibernate文档将@NotFound的用法描述为:

当Hibernate因为预期的关联元素不在数据库中(关联列上的id错误)而无法解析关联时,会引发一个异常。这对于遗留的和维护不好的模式来说可能是不方便的。您可以让Hibernate忽略这些元素,而不是使用@NotFound注释引发异常。

    < Li > http://docs . JBoss . org/hibernate/core/3.6/reference/en-US/html/mapping . html
 类似资料:
  • 我有一个实体,它与

  • 我有三个班,站点,GoupIP和IP 一个站点有一个或多个抱怨。GroupIP有一个或多个IP。 代码如下: 地点 群居 IP 在GroupIp课堂上,我得到: 在属性“ips”中,“映射者”值“groupip”无法解析为目标实体上的属性。 我的代码出了什么问题??

  • 我有以下问题:我正在为GLSL着色语言创建一个编辑器。我希望在某些情况下允许关键字作为标识符,因为内置函数的名称可以用作标识符。 例如: 和不被识别为标识符。 完整语法供参考:http://paste2.org/YwDNkBYW 解决方案: 我创建了一个包含所有内置函数的源文件: 我使用保留的关键字来区分内置函数和本地创建的函数: ...在ScopeProvider中添加了以下内容: 在中,我在迭

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系

  • 我正在使用Ebean和Play 2框架,并得到两个模型:用户模型和图书模型。用户模型与图书模型以一对多关系连接。所以每个用户可以有很多书或者根本没有书。图书模式本身也有其特性。现在我想在用户模型中创建一个查询,它只返回用户,这些用户拥有具有某些属性的书籍。例如:一个属性可能是条件,如新建或使用。现在给我所有有新条件的书的用户。是否可以使用Ebean方法创建这样的查询?还是我必须使用原始SQL?

  • OneTomany:Trplist:TargetEntity:TravelRoutePoints MappedBy:route Cascade:[“Persist”,“Remove”]JoinColumn:Name:id引用的ColumnName:tr_id