hibarnate lazy inizalization例外

时间:2018-04-23 13:24:59

标签: java hibernate

我想在新窗口中打开有关我联系人的信息,但是当我按下时:

<a href="/contactData/${contact.id}" target="_blank">${contact.contactName}</a>

我有这样的错误:

  

org.hibernate.LazyInitializationException:无法初始化代理    - 没有会话org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165)     org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)     org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)     kz.adilka.springsecurity.app.model.Contact _ _ $$ jvsta24_0.getContactName(联系_ _ $$ jvsta24_0.java)

这是我必须打开的jsp文件:

<table class="tg">
    <tr>
        <th width="80">ID</th>
        <th width="120">Name</th>
        <th width="120">Mail</th>
        <th width="120">Phone</th>
        <th width="120">City</th>
    </tr>
        <tr>
            <td>${contact.id}</td>
            <td>${contact.contactName}</td>
            <td>${contact.contactEmail}</td>
            <td>${contact.contactPhone}</td>
            <td>${contact.contactCity}</td>
            </td>
        </tr>
</table>
来自我的控制器的

方法,用于在新窗口中打开信息:

@RequestMapping("contactData/{id}")
public String contactData(@PathVariable("id") int id, Model model) {
    model.addAttribute("contact", this.contactService.getContactById(id));
    return "contactData";
}

我的实体:

@Entity
@Table(name = "contact")
public class Contact {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "contact_name")
    private String contactName;

    @Column(name = "contact_phone")
    private String contactPhone;

    @Column(name = "contact_city")
    private String contactCity;

    @Column(name = "contact_mail")
    private String contactEmail;

1 个答案:

答案 0 :(得分:0)

这是因为您已经使用lazy(显然)注释了您的实体,但是您在JSP中获取了数据,并且关闭了与数据库的连接,并且无法获取它。

解决方案1(推荐):

使用需要在窗口中显示的数据将您的实体转换为DTO。

解决方案2:

使用&#34;渴望&#34;获取所有信息,但如果您有多个信息,这可能不会很好。