Java 无法初始化代理-没有会话和惰性对象

Java 无法初始化代理-没有会话和惰性对象,java,hibernate,Java,Hibernate,无法初始化代理-无会话错误的含义是什么??懒惰对象的含义是什么,为什么会发生???,以及如何避免它而不更改hibernate laze属性,也不使用hibernate.initialize(),因为这对我不起作用。你应该用注释标记你的方法@Transactional @Transactional void method(){ Entity e = ... (from database); e.getLazyField(); } 您应该使用注释@Transactional @Tr

无法初始化代理-无会话
错误的含义是什么??懒惰对象的含义是什么,为什么会发生???,以及如何避免它而不更改hibernate laze属性,也不使用
hibernate.initialize()
,因为这对我不起作用。

你应该用注释标记你的方法
@Transactional

@Transactional
void method(){
    Entity e = ... (from database);
    e.getLazyField();
}

您应该使用注释
@Transactional

@Transactional
void method(){
    Entity e = ... (from database);
    e.getLazyField();
}

这里有两件事,首先你似乎在问“什么是延迟加载”

如果要从与另一个对象有关系的数据库加载对象,则延迟加载只允许加载所需的对象,并且仅在需要时加载相关对象

您遇到的异常是由于在对象与数据库会话断开连接后尝试访问相关对象(显然需要db会话才能加载它们)而导致的

我们有几种方法可以处理这种情况,最合适的方法完全取决于您的应用程序

您始终可以在首次加载对象的事务中加载所需的所有数据(Hibernate.initialise,或者有时只调用getter即可),这将删除您的异常:不利的一面是,您会发现您经常导入大量数据,并且可能存在性能问题

另一种方法是将Id传递到需要使用对象的位置,从数据库中加载一个新的Id,并在事务中执行您的工作,大量传递Id不是很好的OO,但有时这是最好的选择

如果您在UI绑定或其他只想“获取”的地方有这个错误,您可能需要考虑一个“查看会话”,它将为您的懒惰加载提供一个DB会话。 在不了解应用程序及其体系结构的情况下,我无法告诉您什么是最佳选择


如果你想进一步讨论这些问题,请告诉我

这里有几件事,首先你似乎在问“什么是延迟加载”

如果要从与另一个对象有关系的数据库加载对象,则延迟加载只允许加载所需的对象,并且仅在需要时加载相关对象

您遇到的异常是由于在对象与数据库会话断开连接后尝试访问相关对象(显然需要db会话才能加载它们)而导致的

我们有几种方法可以处理这种情况,最合适的方法完全取决于您的应用程序

您始终可以在首次加载对象的事务中加载所需的所有数据(Hibernate.initialise,或者有时只调用getter即可),这将删除您的异常:不利的一面是,您会发现您经常导入大量数据,并且可能存在性能问题

另一种方法是将Id传递到需要使用对象的位置,从数据库中加载一个新的Id,并在事务中执行您的工作,大量传递Id不是很好的OO,但有时这是最好的选择

如果您在UI绑定或其他只想“获取”的地方有这个错误,您可能需要考虑一个“查看会话”,它将为您的懒惰加载提供一个DB会话。 在不了解应用程序及其体系结构的情况下,我无法告诉您什么是最佳选择

如果你想进一步讨论这些问题,请告诉我