用户实体类:
@Entity
public class User implements Serializable {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
public List<Site> sites;
访问数据库的Facade类:
@Stateless
public class UserFacade extends AbstractFacade<User, Long> {
@PersistenceContext
private EntityManager em;
...
}
用户注入的资源类:
@RequestScoped
public class Resource {
@Inject
UserFacade userFacade;
@Inject
HttpServletRequest request;
@Produces
public User getUser() {
final String name = request.getUserPrincipal().getName();
// ... find user in database ...
}
}
泽西经理:
@Stateless
@Path("/sites")
public class Sites {
@EJB
SiteFacade siteFacade;
@Inject
User user;
...
现在出现问题:
当我想访问user.sites列表时,我得到延迟加载异常。但显然是因为UserScoped提供者注入了User,它应该使用相同的EntityManager会话刷新每个请求。正确?
无论如何,我将每个休息请求的用户实体注入Rest处理程序类?
答案 0 :(得分:1)
EntityManager
绑定到事务,而不是请求范围。
因此,User
生产者方法和您的Sites
业务方法在两个不同的交易中被调用,这解释了LazyLoadException
。