有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java LazyLoadingException在我尝试从多通关系获取对象时出现

这是我的实体:


@Entity
public class Answer implements Serializable {
    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="user")
    private CoreUsers user;
    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="person")
    private Person person;
     
}

服务:

@Transactional
public class AnswerService {

    @Autowired
    private AnswerRepository repository;

    public List<Answer> getAnswers(Long id) {
        return repository.findByMessagesidOrderBySenddateDesc(id);
    }
}

回购协议:

@Repository
public interface AnswerRepository extends JpaRepository<Answer, Long> {
    
    List<Answer>  findByMessagesIdOrderBySenddateDesc(Long id);
}

应用程序上下文。xml

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaPropertyMap">
            <map>
                <entry key="hibernate.cache.provider_class"  value="org.hibernate.cache.EhCacheProvider"/>
                <entry key="hibernate.enable_lazy_load_no_trans" value="true" />
                <entry key="hibernate.current_session_context_class" value="thread" />
                <entry key="org.hibernate.cacheable" value="false" />
            </map>
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="showSql" value="false" />
                <property name="showSql" value="true" />
                <property name="generateDdl" value="false" />
            </bean>
        </property>
        <property name="persistenceUnitName" value="cccPersistenceUnit" />
    </bean>

    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
        </property>
    </bean>

我通过我的服务类在JSFbean中加载一个答案(列表)集合。当我尝试从集合中获取Person对象时(一切正常),但当我尝试从集合中获取User对象时,hibernate抛出LazyInitializationException。我做错了什么

hibernate试图从hibernate会话中获取用户对象,对吗

请随时询问任何其他信息

谢谢你的帮助

在创建线程之前,我在谷歌上搜索了很多次

UPD 我将实体设置为急切加载,并注意到我的应用程序试图从用户表加载未列出的ID。这就是问题所在:)


共 (1) 个答案

  1. # 1 楼答案

    您可以使用以下工具获取完整的对象树:

    import org.springframework.transaction.annotation.Transactional;
    
    @Transactional
    public List<Answer> getAnswers(Long id) {
        return repository.findByMessagesidOrderBySenddateDesc(id);
    }