日期:2014-05-18  浏览次数:20661 次

SSH框架中懒加载问题 在线等!!!!求大神
表的结构如图:
用hibernate维护,语句为
public List<PubRequest> getRequest(String userName) {

Session session = sessionFactory.openSession();

// @SuppressWarnings("unchecked")  嘛意思
List<PubRequest> pubrequests =  session
.createQuery("from PubRequest as p where p.pubuser.userName = ? and p.allowText ='同意' ")
.setString(0, userName)
.list();

for(PubRequest pubrequest:pubrequests){
System.out.println(pubrequest.getAllowText()+"============================");
}
for(PubRequest pubrequest:pubrequests){
System.out.println(pubrequest.getPubuser().getTrueName()+"============================");
System.out.println(pubrequest.getPubtest().getTestName()+"============================");
}

session.close();
return pubrequests;
}

}


其中allowText的值可以输出,但是下面的引用外键的不可以输出

下面是三个bean类,lazy不去掉也不对,如果把lazy去掉或改成不是懒加载机制,直接报
java.lang.NullPointerException
org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:2314)
org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:664)
org.hibernate.type.EntityType.resolve(EntityType.java:444)
org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:168)
org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:999)
org.hibernate.loader.Loader.doQuery(Loader.java:878)
package com.niit.bean;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Proxy;
/**
 * 
 * 考试信息表
 */
@Entity
public class PubTest implements Serializable{

@Id
@GeneratedValue
private int testId;                     //考试id
private String testName;                //考试名
@Column(columnDefinition="timestamp")
private Date startTime;                 //开始时间
@Column(columnDefinition="timestamp")
private Date endTime;                   //结束时间
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="tacticsId")            //策略
private PubTactics pubtactics;        
private String isTimeOut;               //是否过期<