【发布时间】:2014-04-03 08:46:13
【问题描述】:
您好,我正在使用 Hibernate 和 Jersey 做一个项目。
在服务层我得到一个“LazyInitializationException”。我搜索了很多。
我看到了creating custom AccessorType 的解决方案。但我仍然遇到异常。
谁能帮帮我??
我将提供有关它的更多详细信息。
Bean:用户
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlAccessorFactory(XmlAccessorFactoryImpl.class)
public class User {
private String userName;
private String password;
private String email;
private String fname;
private String lname;
private Set<MachineTemplate> machineTemplates;
private String photoUrl;
public User() {
machineTemplates = new HashSet<>();
}
public User(String userName) {
this.userName = userName;
}
public User(String userName, String password, String email, String fname,
String lname) {
this.userName = userName;
this.password = password;
this.email = email;
this.fname = fname;
this.lname = lname;
this.machineTemplates = new HashSet<>();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public Set<MachineTemplate> getMachineTemplates() {
return machineTemplates;
}
public void setMachineTemplates(Set<MachineTemplate> machineTemplates) {
this.machineTemplates = machineTemplates;
}
public String getPhotoUrl() {
return photoUrl;
}
public void setPhotoUrl(String photoUrl) {
this.photoUrl = photoUrl;
}
}
DAO 层方法
public User get(String uName) {
Session session = getSessionFactory().openSession();
User u = (User) session.get(User.class, uName);
session.close();
}
服务层方法
@GET
@Path("/{userName}")
@Produces(MediaType.APPLICATION_JSON)
public User getUserInfo(@PathParam("userName") String userName) {
return userHelper.getUser(userName);
}
【问题讨论】:
-
您能分享您的实体、服务层以获取更多详细信息吗?
-
@BalajiReddy 我更新了..
-
与所有 getter 和 setter 方法共享您的 User 类。?
-
@Balaji 我使用 XML 完成了映射。
-
IMO 以低级 DAO 方法打开和关闭会话的事实是代码异味;这表明设计缺陷可能是您当前问题的核心。会话应该在更高的级别上处理,这样实体可以由 Hibernate 管理比单个方法调用更长的时间。
标签: java hibernate jaxb jersey