- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题已被问过很多次,但我仍然找不到适合我的用例的解决方案:
我有一个使用 Hibernate 5.x 的 Struts2 应用程序。
该应用程序是“通讯录应用程序”。它有两个实体:“联系人”,可以有零个或多个“注释”。
以下是我获取联系人的方式:
@Override
public List<Contact> getContacts() {
//Note: Hibernate 5++ supports Java try-with-resource blocks
try (Session session = HibernateUtil.openSession()) {
List<Contact> contacts = session.createQuery("FROM Contact").list();
return contacts;
...
效果很好。直到我尝试这样的事情:
ObjectMapper mapper = new ObjectMapper();
jsonString = mapper.writeValueAsString(contacts);
错误:
16:05:16.174 [http-nio-8080-exec-2] DEBUG org.apache.struts2.dispatcher.Dispatcher - Dispatcher serviceAction failed
com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.example.contactsapp.models.Contact.notes, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->com.example.contactsapp.models.Contact["notes"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:394) ~[jackson-databind-2.10.0.jar:2.10.0]
...
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4094) ~[jackson-databind-2.10.0.jar:2.10.0]
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3404) ~[jackson-databind-2.10.0.jar:2.10.0]
at com.example.contactsapp.actions.ContactsAction.getContacts(ContactsAction.java:36) ~[classes/:?]
...
可能的解决方案
我不想想要更改为FetchType.Eager
。
由于我没有使用 Spring,因此无法使用 @Transactional
或 OpenSessionInView
。但如果有仅限 Hibernate 的等效项,我会很高兴。
这些是我尝试过的方法(主要基于 How to solve the “failed to lazily initialize a collection of role” Hibernate exception ):
@Override
public List<Contact> getContactsFetchAll() {
//Note: Hibernate 5++ supports Java try-with-resource blocks
try (Session session = HibernateUtil.openSession()) {
// Jackson mapper.writeValueAsString() => "failed to lazily initialize a collection"
// List<Contact> contacts = session.createQuery("FROM Contact").list();
// Plan A: Causes same "failed to lazily initialize a collection" runtime error
// List<Contact> contacts = session.createQuery("FROM Contact").list();
// Hibernate.initialize(contacts);
// Plan B: Still no-go: returns [] empty set
// List<Contact> contacts = session.createQuery("SELECT c FROM Contact c JOIN FETCH c.notes n").list();
// Plan C: Same: "failed to lazily initialize a collection of role..."
// Query query = session.createQuery("FROM Contact");
// Hibernate.initialize(query);
// List<Contact> contacts = query.list();
// Plan D: Same: "ERROR: failed to lazily initialize a collection of role"
// List<Contact> contacts = session.createQuery("FROM Contact").list();
// for (Contact c : contacts) {
// Set<Note> n = c.getNotes();
// }
return contacts;
}
}
问:有什么建议吗?
问:您需要任何其他信息吗?
<小时/>我做了更多研究。
显然,在这个特定场景中,Hibernate 根本不执行“连接”。
相反:
最佳答案
如果您在实体配置中使用延迟初始化进行 OneToMany 映射,并且在某些情况下您希望急切地获取集合。我认为您可以使用 @NamedQuery 在单个查询中获取列表(在您的情况下为 Left Join)。
关于java - Hibernate "failed to lazily initialize a collection"运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743685/
isqrt :: Integer -> Integer isqrt = floor . sqrt . fromIntegral primes :: [Integer] primes = sieve [
有没有F :: * -> * , iterate' :: Ord a => (a -> a) -> a -> F a和 elem' :: Ord a => Int -> a -> F a -> Boo
我有一个 TabBar Controller ,最多有 9 个 Controller ,每个 Controller 都有一个导航 Controller 。目前,我在 的应用程序委托(delegate)
我正在制作一个内容无限的 UIScrollView,例如其中包含事件的日历。我正在使用 REST 调用从后端获取事件。 我想知道是否有人有一个模式/代码块的限制: 何时获取更多数据和 还要获取多少 易
我有一个如下所示的拼图数据集(我使用的是Polar,但任何数据框库都可以):。我希望通过Match_id和测试训练拆分进行分组,这样80%的匹配项在训练集中,其余的在测试集中。所以大概是这样的:。我需
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: in.aaju
我有两个实体:用户和模块,它们使用多对多链接。 在我的用户实体中,我有一个模块列表成员: 我成功插入了一个新用户,但是当我想检索用户时,我得到了用户信息,但没有得到用户的模块。我收到此错误消息: .h
是否可以在 中实现实时滚动或延迟滚动?其中有 环形。我在 中有以下代码,我想延迟加载内容。
后端 Spring MVC 和 Spring-data,spring-security 。前端 Angularjs。我使用的是 spring 3.1;Jackson 1.8; JPa 2.1 ands
我有一对多的关系,这是我的代码 @Entity @Table(name = "catalog") public class Catalog { @Id @GeneratedValue(
我正在使用 Spring Boot 1.5.10、Spring Data JPA 和 Hibernate。 当我按 Id 搜索实体 Person 时,结果是正确的,但是当我尝试使用 List 构建查询
这个问题已被问过很多次,但我仍然找不到适合我的用例的解决方案: 我有一个使用 Hibernate 5.x 的 Struts2 应用程序。 该应用程序是“通讯录应用程序”。它有两个实体:“联系人”,可以
我有这个问题: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
假设我的 Java、Spring Boot、Hibernate 应用程序中有这个类: @Entity @Table(name="person") @Getter @Setter @NoArgsCons
我有延迟初始化的问题。我找不到解决方案。 异常(exception): [pool-1-thread-12] ERROR:12:20:14.840 o.h.LazyInitializationExce
假设我想在 clojure 中打印 hbase 表扫描的输出。 (defmulti scan (fn [table & args] (map class args))) (defmethod scan
我需要响应 JSON 作为输出。但它显示异常 org.codehaus.jackson.map.JsonMappingException: failed to lazily initialize a
我有一个数据融合查询。我不想等所有批次都待处理,而是想在第一个批次准备好后立即运行一些代码。 这是等待然后处理的代码: let dataframe = ExecutionContext::new().
我在哪里可以找到 Xcode6 中的“Load Symbols Lazily”选项? 我在“偏好”中找不到它 最佳答案 Load Symbols Lazily”选项在 Xcode 6 中不可用。 您可
我尝试使用 java - hibernate - spring 实现服务器 REST,它返回一个 json。 我映射了一个多对多的关系。 我解释得更好,我有一个供应商,上面有一个成分列表,每个成分都有
我是一名优秀的程序员,十分优秀!