是的,所以我正在与hibernategilead和gwt一起将我的数据保存在网站的用户和文件中。我的用户有文件位置列表。我正在使用注释将我的课程映射到数据库。org.hibernate.LazyInitializationException
当我尝试将文件位置添加到用户类中保存的列表时,我得到了提示。
这是下面的方法,该方法已从我使用的外部文件上传servlet类中覆盖。文件上传时,将调用此方法。
user1是从其他位置的数据库加载的。例外发生在user1.getFileLocations().add(fileLocation);
。我真的不明白。任何帮助都会很棒。错误的堆栈跟踪如下
public String executeAction(HttpServletRequest request,
List<FileItem> sessionFiles) throws UploadActionException {
for (FileItem item : sessionFiles) {
if (false == item.isFormField()) {
try {
YFUser user1 = (YFUser)getSession().getAttribute(SESSION_USER);
// This is the location where a file will be stored
String fileLocationString = "/Users/Stefano/Desktop/UploadedFiles/" + user1.getUsername();
File fl = new File(fileLocationString);
fl.mkdir();
// so here i will create the a file container for my uploaded file
File file = File.createTempFile("upload-", ".bin",fl);
// this is where the file is written to disk
item.write(file);
// the FileLocation object is then created
FileLocation fileLocation = new FileLocation();
fileLocation.setLocation(fileLocationString);
//test
System.out.println("file path = "+file.getPath());
user1.getFileLocations().add(fileLocation);
//the line above is where the exception occurs
} catch (Exception e) {
throw new UploadActionException(e.getMessage());
}
}
removeSessionFileItems(request);
}
return null;
}
//这是您的文件用户的类文件
@Entity
@Table(name = "yf_user_table")
public class YFUser implements Serializable,ILightEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id",nullable = false)
private int userId;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "USER_FILELOCATION", joinColumns = {
@JoinColumn(name = "user_id") }, inverseJoinColumns = {
@JoinColumn(name = "locationId") })
private List<FileLocation> fileLocations = new ArrayList<FileLocation>() ;
public YFUser(){
}
public int getUserId() {
return userId;
}
private void setUserId(int userId) {
this.userId = userId;
}
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 List<FileLocation> getFileLocations() {
if(fileLocations ==null){
fileLocations = new ArrayList<FileLocation>();
}
return fileLocations;
}
public void setFileLocations(List<FileLocation> fileLocations) {
this.fileLocations = fileLocations;
}
/*
public void addFileLocation(FileLocation location){
fileLocations.add(location);
}*/
@Override
public void addProxyInformation(String property, Object proxyInfo) {
// TODO Auto-generated method stub
}
@Override
public String getDebugString() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getProxyInformation(String property) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isInitialized(String property) {
// TODO Auto-generated method stub
return false;
}
@Override
public void removeProxyInformation(String property) {
// TODO Auto-generated method stub
}
@Override
public void setInitialized(String property, boolean initialised) {
// TODO Auto-generated method stub
}
@Override
public Object getValue() {
// TODO Auto-generated method stub
return null;
}
}
@Entity
@Table(name = "fileLocationTable")
public class FileLocation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "locationId", updatable = false, nullable = false)
private int ieId;
@Column (name = "location")
private String location;
public FileLocation(){
}
public int getIeId() {
return ieId;
}
private void setIeId(int ieId) {
this.ieId = ieId;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
Apr 2, 2010 11:33:12 PM org.hibernate.LazyInitializationException <init>
SEVERE: failed to lazily initialize a collection of role: com.example.client.YFUser.fileLocations, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.client.YFUser.fileLocations, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.write(AbstractPersistentCollection.java:205)
at org.hibernate.collection.PersistentBag.add(PersistentBag.java:297)
at com.example.server.TestServiceImpl.saveFileLocation(TestServiceImpl.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:174)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Apr 2, 2010 11:33:12 PM net.sf.gilead.core.PersistentBeanManager clonePojo
INFO: Third party instance, not cloned : org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.client.YFUser.fileLocations, no session or session was closed
惰性表示仅在访问集合的值时才从数据库中加载它们。如果当时Session
已关闭,则将LazyInitializationException
抛出,因为无法获取数据。
在您的情况下,我只是建议向该关联添加一个渴望的获取类型:
@ManyToMany(cascade = CascadeType.ALL, fetchType=FetchType.EAGER)
这将在加载fileLocations
实体时加载,并且不需要延迟加载。
一个常见的解决方案是使用OpenSessionInView,但是它可能并不总是与GWT一起使用,因为客户端是远程的,并且无法在此处打开会话。
我有一个模型类,如下所示: 以及控制器中显示输出的方法: 它确实显示了一个输出,一切都很好: 我想计算每个公司的评级,同时向最终用户显示数据。因此,输出应如下所示: 是否可以将评级列动态添加到公司列表中,或者我应该在数据库中创建评级列,在控制器中更新其方法,迭代findAll()结果,并在用户每次尝试访问/列表endpoint时调用它?
我有以下情况: 我想把所有动物都放在动物桌上。但是当我加载它们时,我想说它们是在哪个子类中加载的。在这种情况下,动物在理论上是抽象的。 这样的事情可能吗: 问题是,否则我看不出有任何可能从装载的动物投射到猫。:( 我用的是Hibernate4.2
我发现这个问题很有帮助,但是我仍然很难让我的循环正确工作。 期望: 我正在构建一个简单的JavaFX应用程序,它的用户界面通过几个文本字段和几个按钮进行输入。我已经建立了一个“重置”按钮,应该清除所有文本字段中的文本,但是我不能让它工作。 按钮的方法循环遍历FXML元素,我希望它能识别TextFields并将它们添加到列表中: 然后,文本字段列表返回到此方法,其中文本字段被循环并清除: 现实: 在
问题内容: 我有一堂课; 使用ResultSetMetaData,我可以建立TableModel来匹配数据库中的结果集。 在 B类中 ,我扩展了JPanel并添加了 A类 来显示我的表。我希望能够根据条件向表模型添加新列。我已尝试使用Google搜索,但显示的大多数示例均基于not 。 有谁知道如何实现这一目标? 问题答案: 只需扩展DefaultTableModel,然后就可以访问其所有方法。D
问题内容: 如果需要在列表中添加枚举属性,如何声明列表?让我们说枚举类是: 我想要做: 需要用什么代替 问题答案: 如果要使用字符串类型,请使用以下命令: 否则,MByD的答案
目的是执行本机查询并将结果映射到bean类。我能够用实体测试我的应用程序。JPA能够根据实际的数据库表验证它们的映射。 为什么使用本机查询而不编写完整的实体->查询涉及多个联接。不需要将查询中涉及的所有表作为实体包含。 与jpa相关的应用程序上下文xml的一部分如下所示 当我试图执行查询时,我得到了下面的异常 原因:org.hibernate.mappingexception:未知实体:com.a