gpt4 book ai didi

spring - hibernate 以在不同的事务中初始化对象

转载 作者:行者123 更新时间:2023-12-02 22:14:28 25 4
gpt4 key购买 nike

我遇到了著名的 LazyInitializationException。

我有一个存储在 session 中的对象用户。该对象包含一个延迟初始化的其他对象市场。当我在 session 中加载用户时,我不会加载市场,因为它太重而且我不需要每次都需要它。

当我想加载市场时,我处于不同的事务中,我不想从数据库中重新加载用户。如何检索市场对象?知道 User.market 包含 Hibernate 代理和市场的 id,并且我不想使用反射来破解 Hibernate。

如果我可以在不将市场加载到用户中的情况下加载市场,那就更好了。由于用户在 session 中,我不想在 session 中放很多东西。

JPA 兼容的解决方案会更好。

干杯

最佳答案

如果不能接受eager模式的抓取,如果交易不能维持到Market检索,可以实现特定的dao方法专门从用户检索market

public List<Market> retrieveMarketFromUser (final User user) {
Query query = session.createQuery("SELECT m FROM User AS u INNER JOIN u.market as m WHERE u.userid = :uid");
query.setParameter("uid", user.getId());
List<Market> list = query.list();
return list;
}

或简短的版本

  Query query = session.createQuery("SELECT u.market FROM User AS u WHERE u.userid = :uid");

这可能不是您期望的 JPA 解决方案,只是一种解决方法。

关于spring - hibernate 以在不同的事务中初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com