zeng7960983 2010-09-15 09:46
浏览 447
已采纳

could not initialize proxy - no Session

实体类FileManager:
package com.dynastarter.sc.file.po;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**

  • Filemanager entity.
  • @author MyEclipse Persistence Tools
    */
    @Entity
    @Table(name = "filemanager")
    public class FileManager implements java.io.Serializable {
    private Long id;
    private String filename;
    private Integer fileSize;
    private String fileContentType;
    private Long site;
    private Date uploadTime;
    private Integer parentDirectory;
    private Byte isDirectory;
    private Byte isFile;

    // Constructors

    /** default constructor */
    public FileManager() {
    }

    // Property accessors
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
    return this.id;
    }

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

    @Column(name = "filename")
    public String getFilename() {
    return this.filename;
    }

    public void setFilename(String filename) {
    this.filename = filename;
    }

    @Column(name = "fileSize")
    public Integer getFileSize() {
    return this.fileSize;
    }

    public void setFileSize(Integer fileSize) {
    this.fileSize = fileSize;
    }

    @Column(name = "fileContentType")
    public String getFileContentType() {
    return this.fileContentType;
    }

    public void setFileContentType(String fileContentType) {
    this.fileContentType = fileContentType;
    }

    @Column(name = "site")
    public Long getSite() {
    return this.site;
    }

    public void setSite(Long site) {
    this.site = site;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "uploadTime")
    public Date getUploadTime() {
    return this.uploadTime;
    }

    public void setUploadTime(Date uploadTime) {
    this.uploadTime = uploadTime;
    }

    @Column(name = "parentDirectory")
    public Integer getParentDirectory() {
    return this.parentDirectory;
    }

    public void setParentDirectory(Integer parentDirectory) {
    this.parentDirectory = parentDirectory;
    }

    @Column(name = "isDirectory")
    public Byte getIsDirectory() {
    return this.isDirectory;
    }

    public void setIsDirectory(Byte isDirectory) {
    this.isDirectory = isDirectory;
    }

    @Column(name = "isFile")
    public Byte getIsFile() {
    return this.isFile;
    }

    public void setIsFile(Byte isFile) {
    this.isFile = isFile;
    }
    }
    -----但是根据id获得对象是就报错
    dao:
    @Repository
    public class FileManagerDAO extends HibernateDao {

    /**

    • 根据目录id找到该目录下的文件
    • @param id目录id值
    • @return */ public List getFileManagerByParentId(int id){ List list=this.getSession().createQuery(" from FileManager where parentDirectory="+id+" ").list(); return list; }

}

service:
@Service
@Transactional
public class FileManagerService {
@Autowired
private FileManagerDAO fileManagerDAO;

public FileManager getRootFileManager(){
    return fileManagerDAO.get(new Long(1));
}


public FileManager getFileManager(Long id){
    return fileManagerDAO.get(id);
}

@Transactional
public void deleteFileManager(Long id){
     fileManagerDAO.delete(id);
}

public List<FileManager> getFileManagerByParentId(int parentId){
    return fileManagerDAO.getFileManagerByParentId(parentId);
}

}

action中调用:

public String loadDocument() throws Exception{
StringBuilder sb=new StringBuilder("[");
String root=getRequest().getParameter("root");
if(root!=null&&"true".equals(root)){
FileManager fileManager= fileManagerService.getRootFileManager();
System.out.println(fileManager.getId());
sb.append("{");
sb.append("'id':").append(""+fileManager.getId()+",");
sb.append("'fileName':").append("'"+fileManager.getFilename()+"',");
sb.append("'fileSize':").append(fileManager.getFileSize()+",");
sb.append("'fileContentType':").append("'"+fileManager.getFileContentType()+"',");
// sb.append("'uploadUser':").append("'"+fileManager.getUploadUser().getPersonName()+"',");
sb.append("'uploadTime':").append("'"+fileManager.getUploadTime()+"',");
sb.append("'isDirectory':").append("'"+fileManager.getIsDirectory()+"',");
sb.append("'isFile':").append("'"+fileManager.getIsFile()+"',");
sb.append("'childFiles':");
sb.append("''");
sb.append("}");
/* sb.append("{");
sb.append("'id':").append("1,");
sb.append("'fileName':").append("'呵呵',");
sb.append("'parentDirectory':").append("-1");
sb.append("}");*/
}
else{

List list=fileManagerService.getFileManagerByParentId(id);
for(FileManager fileManager1:list){
sb.append("{");
sb.append("'id':").append(""+fileManager1.getId()+",");
sb.append("'fileName':").append("'"+fileManager1.getFilename()+"',");
sb.append("'fileSize':").append(fileManager1.getFileSize()+",");
sb.append("'fileContentType':").append("'"+fileManager1.getFileContentType()+"',");
// sb.append("'uploadUser':").append("'"+fileManager1.getUploadUser().getPersonName()+"',");
sb.append("'uploadTime':").append("'"+fileManager1.getUploadTime()+"',");
sb.append("'isDirectory':").append("'"+fileManager1.getIsDirectory()+"',");
sb.append("'isFile':").append("'"+fileManager1.getIsFile()+"',");
sb.append("},");
}
}
if(sb.lastIndexOf(",")>0){
sb=new StringBuilder(sb.substring(0,sb.lastIndexOf(",")));
}
sb.append("]");
System.out.println(sb.toString());
getResponse().setContentType("text/html;charset=UTF-8");
getResponse().getWriter().write(sb.toString());
return null;
}

  • 写回答

5条回答 默认 最新

  • CaiHuajiang 2010-09-16 10:08
    关注

    关于这个问题,首先要肯定的是在你的action中session已关闭。
    那么你所要做的是进行调试。
    找出在openSessionInViewFilter中是否正确步入,
    或者session是在那里被人为关闭了。

    如果你觉得麻烦而不愿意调试的话,我还有一个办法,使是强制加载。
    在session尚未关闭的时候使用Hibernate.initialize(a)。那么就会将a强制为游离态时也可以使用的实体。

    如上面改为:
    public List getFileManagerByParentId(int id){
    [code="java"]List list=this.getSession().createQuery(" from FileManager where parentDirectory="+id+" ").list();

    for(list){
    Hibernate.initialize(list.i);
    }

    return list;
    } [/code]

    将上面的伪码换为java语句就应该可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题