【问题标题】:Lazy loading in TomEE is not working as expectedTomEE 中的延迟加载未按预期工作
【发布时间】:2013-12-03 06:52:10
【问题描述】:

实体的惰性属性在 TomEE 中始终返回 null 值,但在 Glassfish 3 中按预期工作。有没有我想在web.xml 或其他内容中包含的听众?如何获取惰性属性?

这里是源代码:

AppGroup.java:

package uz.mf.javaee6app;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class AppGroup implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    public Long getId() { return id; }

    public void setId(Long id) { this.id = id; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }
}

AppUser.java: 打包 uz.mf.javaee6app;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
 *
 * @author ravshan
 */
@Entity
public class AppUser implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private List<AppGroup> roles;

    public Long getId() { return id; }

    public void setId(Long id) { this.id = id; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public List<AppGroup> getRoles() { return roles; }

    public void setRoles(List<AppGroup> roles) { this.roles = roles; }
}

我跳过了 AppUserFacade 无状态 bean 和 UserManager CDI bean,没有什么特别的。和最后一个 users.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Selected user: #{userManager.selectedUser.name}
        <h:dataTable value="#{userManager.selectedUser.roles}" var="role">
            <h:column>#{role.name}</h:column>
        </h:dataTable>
    </h:body>
</html>

UserManager.java: 打包 uz.mf.javaee6app;

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named
@SessionScoped
public class UserManager implements Serializable {

    private AppUser selectedUser;

    public AppUser getSelectedUser() {
        return selectedUser;
    }

    public void setSelectedUser(AppUser selectedUser) {
        this.selectedUser = selectedUser;
    }

}

选定的用户正在被另一个视图设置。

【问题讨论】:

  • 没有你的源码,无法正确回答你的问题
  • 我认为在实践中使用 glassfish/eclipselink 和 tomee/openjpa 的人即使没有代码也能理解问题。
  • 我们还能看到 userManager 吗?

标签: jpa-2.0 java-ee-6 glassfish-3 openjpa apache-tomee


【解决方案1】:

我敢打赌,问题在于您的实体在访问延迟加载字段之前以某种方式分离。请务必检查您的事务属性,以确保在您尝试延迟加载工作时您的上下文仍然处于活动状态。

【讨论】:

  • 是的,我已经读过这个,但有趣的是我正在 glassfish3/eclipselink 中尝试它,它按预期工作,但它在 tomee 中不起作用。
猜你喜欢
  • 2017-06-23
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多