小弟今日自学java,用到了Hibernate3.2的框架,在测试过程中出现以下问题,不知道该如何解决,请各位高手指点:
package ch06_2;import java.util.Set;
import java.util.HashSet;;public class employee {
   private Integer employee_id;
   private String employee_name;
   private String employee_desc;
   private Set projects=new HashSet();
public Integer getEmployee_id() {
return employee_id;
}
public void setEmployee_id(Integer employee_id) {
this.employee_id = employee_id;
}
public String getEmployee_name() {
return employee_name;
}
public void setEmployee_name(String employee_name) {
this.employee_name = employee_name;
}
public String getEmployee_desc() {
return employee_desc;
}
public void setEmployee_desc(String employee_desc) {
this.employee_desc = employee_desc;
}
public Set getProjects() {
return projects;
}
public void setProjects(Set projects) {
this.projects = projects;
}
   
}<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="ch06_2.employee" table="tbl_project">
  <id column="employee_id" name="employee_id" type="java.lang.Integer">
   <generator class="assigned"/>
  </id>
  <property column="employee_name" lazy="false"
   name="employee_name" type="java.lang.String"/>
  <property column="employee_desc" lazy="false"
   name="employee_desc" type="java.lang.String"/>
  <set inverse="true" name="projects" table="tbl_project" lazy="false">
   <key column="r_emp_id" />
   <many-to-many class="ch06_2.project" column="r_proj_id" lazy="false"/>
  </set>
 </class>
</hibernate-mapping>package ch06_2;import java.util.Set;
import java.util.HashSet;;public class project {
private Integer project_id;
private String project_name;
private String project_desc;
private Set employees=new HashSet();
public Integer getProject_id() {
return project_id;
}
public void setProject_id(Integer project_id) {
this.project_id = project_id;
}
public String getProject_name() {
return project_name;
}
public void setProject_name(String project_name) {
this.project_name = project_name;
}
public String getProject_desc() {
return project_desc;
}
public void setProject_desc(String project_desc) {
this.project_desc = project_desc;
}
public Set getEmployees() {
return employees;
}
public void setEmployees(Set employees) {
this.employees = employees;
}

}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="ch06_2.project" table="tbl_project">
  <id column="project_id" name="project_id" type="java.lang.Integer">
   <generator class="assigned"/>
  </id>
  <property column="project_name" lazy="false"
   name="project_name" type="java.lang.String"/>
  <property column="project_desc" lazy="false"
   name="project_desc" type="java.lang.String"/>
  <set name="employees"  table="tbl_emp_proj" lazy="false">
   <key column="r_proj_id"/>
   <many-to-many class="ch06_2.employee" column="r_emp_id"  lazy="false"/>
  </set>
 </class>
</hibernate-mapping>
package ch06_2;import ch05.BaseHibernateDao;
import java.util.*;public class ManyToManyTest extends BaseHibernateDao{ /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
             new ManyToManyTest().test1();
}
public void test1(){
project pro=(project)super.get(project.class, new Integer(1));
System.out.println(pro.getProject_name());
Iterator it=pro.getEmployees().iterator();
while(it.hasNext()){
employee emp=(employee)it.next();
System.out.print(emp.getEmployee_name()+";");
}
}}以下是错误提示:
org.hibernate.exception.SQLGrammarException: could not initialize a collection: [ch06_2.project.employees#1]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2001)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:454)
at org.hibernate.engine.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:797)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:241)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at ch05.BaseHibernateDao.get(BaseHibernateDao.java:14)
at ch06_2.ManyToManyTest.test1(ManyToManyTest.java:16)
at ch06_2.ManyToManyTest.main(ManyToManyTest.java:13)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'employee_id' 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
... 22 more
Exception in thread "main" java.lang.NullPointerException
at ch06_2.ManyToManyTest.test1(ManyToManyTest.java:17)
at ch06_2.ManyToManyTest.main(ManyToManyTest.java:13)

解决方案 »

  1.   

    Exception in thread "main" java.lang.NullPointerException
    at ch06_2.ManyToManyTest.test1(ManyToManyTest.java:17)
    at ch06_2.ManyToManyTest.main(ManyToManyTest.java:13)
      

  2.   

    已经搞定了,我太粗心了,
    将  <class name="ch06_2.employee" table="tbl_project"> 
    改为  <class name="ch06_2.employee" table="tbl_employee">将 <set inverse="true" name="projects" table="tbl_project" lazy="false">
    改为   <set inverse="true" name="projects" table="tbl_emp_proj" lazy="false">之后重新运行 ok!