Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当对象在jpa中使用hibernate代理时,将惰性初始化对象设为null_Java_Hibernate_Jpa - Fatal编程技术网

Java 当对象在jpa中使用hibernate代理时,将惰性初始化对象设为null

Java 当对象在jpa中使用hibernate代理时,将惰性初始化对象设为null,java,hibernate,jpa,Java,Hibernate,Jpa,例如,我有三门课,如下所示 User{ Integer id; ... } Book{ Integer id; .... @ManyToOne(fetch=FetchType.lazy) User insertedBy; } Author{ Integer id; List<Book> books; } 用户{ 整数id; ... } 书{ 整数id; .... @manytone(fetch=FetchType.lazy) 用户插入方

例如,我有三门课,如下所示

User{
   Integer id;
   ...
}

Book{
  Integer id;
  ....

  @ManyToOne(fetch=FetchType.lazy)
  User insertedBy;
}

Author{
   Integer id;
   List<Book> books;
}
用户{
整数id;
...
}
书{
整数id;
....
@manytone(fetch=FetchType.lazy)
用户插入方式;
}
作者{
整数id;
列出书籍;
}
现在我需要在同一页中显示作者列表,以及他们所写的书籍 因此,我使用jpa存储库使用findAll()方法获取作者。在这里,我不需要插入的 一列列的书,所以我懒洋洋地把它们弄疯了

当我试图用Gson将这些作者列表转换为json对象时。 它在用户类中给出延迟加载异常(Hibernate代理…未找到会话…)

我遵循了这个网络中给出的许多方法,如TypeAdapters。 什么也帮不了我。 我只是想让书籍的列插入作为延迟加载中的null

现在我使用Dto类来避免insertedBy/make insertedBy为null

有没有其他不转换为Dto的简单方法

我多次面对这个问题。所有这些时间我最终都转换成了Dto

如果有人知道答案,请帮我解决

Hibernate中的“延迟加载”意味着在加载父级时,实际上不会加载子级,通常是在迭代期间尝试访问子级时,它会被加载。在您的情况下,您会收到这个延迟加载异常,因为当gson尝试访问子对象以将其映射到JSON对象时,会话已经关闭


可能您可以要求GSON在使用GSON提供的ExclutionStrategy类映射到JSON时忽略该字段

您的
User
类是否有一个
List
字段,该字段使用Hibernate正确映射?当您将对象转换为JSON时,将调用所有字段的getter。当调用
insertedBy
的getter时(当hibernate会话关闭时),它将抛出延迟加载异常。如果要忽略此字段以转换为JSON,只需使用
@JsonIgnore
对该字段进行注释,现在它将不会转换为JSON。在这种情况下,DTO是一种方法。向前端/API/集成层公开域模型通常不是一个好主意。有一个DTO使这种区别变得清晰,并允许两者独立发展。Mushif Ali Nawaz,在图书列表页面中,我需要显示insertedBy列。如果我将该字段设为jsonIgnore,我可能无法使用该列augusto,这就是我现在要做的,如果我有很多类似的场景,那么必须为每个模块编写转换代码。如果我使用像Dozer mapper这样的类转换机制,这些功能需要花费大量时间来转换记录列表。这使得应用程序速度变慢