Java 获取具有一对一关系的实体
我在程序中有两个实体Java 获取具有一对一关系的实体,java,sql,spring,hibernate,spring-mvc,Java,Sql,Spring,Hibernate,Spring Mvc,我在程序中有两个实体 @Entity @Table(name = "users") public class User { @OneToMany(mappedBy = "senderUser") private List<Message> sentMessages; @OneToMany(mappedBy = "recipientUser") private List<Message> receivedMessages; 在我看来,当你在登录时下载一个用户时,你会和
@Entity
@Table(name = "users")
public class User {
@OneToMany(mappedBy = "senderUser")
private List<Message> sentMessages;
@OneToMany(mappedBy = "recipientUser")
private List<Message> receivedMessages;
在我看来,当你在登录时下载一个用户时,你会和他的消息以及这两个列表混在一起。但我想检查一下,然后在屏幕上显示其中一个列表的大小,因为我在数据库中有两条消息,同时在控制器中显示
System.out.println("Length: " + ((User) session.getAttribute("user")).getReceivedMessages().size());
在浏览器中抛出错误
Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jonki.Entity.User.receivedMessages, could not initialize proxy - no Session
及
会话似乎有问题,但怎么办?假设您的用户类应该进行如下修改 User.java
@Entity
@Table(name = "users")
public class User {
@OneToMany(mappedBy = "senderUser",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List<Message> sentMessages;
@OneToMany(mappedBy = "recipientUser",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List<Message> receivedMessages;
@实体
@表(name=“users”)
公共类用户{
@OneToMany(mappedBy=“senderUser”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
私人列表信息;
@OneToMany(mappedBy=“recipientUser”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
私有列表接收的消息;
将以下条目添加到hibernate.cfg.xml中,如下所示
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>
希望这有帮助。假设您必须提到一个
获取类型
,以便加载接收的消息。
现在我“未能懒洋洋地初始化角色集合:com.jonki.Entity.User.receivedMessages,无法初始化代理-无会话”。它可以“FetchType.EAGER”,但我有“FetchType.LAZY”。请与我共享hibernat如果您需要在hibernate配置中添加
,请参阅此文件以了解更多详细信息。
@Entity
@Table(name = "users")
public class User {
@OneToMany(mappedBy = "senderUser",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List<Message> sentMessages;
@OneToMany(mappedBy = "recipientUser",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List<Message> receivedMessages;
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>