小弟今日自学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)
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)
解决方案 »
- 如何去掉 MyEclipse启动后出现的“MyEclipse Start Page”页面
- ireport 可以动态增、删字段吗?
- 两个类之间的调用问题,求指教
- 求助项目编译成war包放入weblogic里出错找不到类文件
- 100分求解“SQL数据库数据同步”高手进
- 请问:我在网上看到各种在Elicpse下J2EE环境的配置,各位大哥能不解释一下下面的插件的作用,谢谢
- 谁能告诉我 struts 的好处?
- tomcat中的Context path 起和作用 那位能详细的说下 谢谢
- 超级菜鸟问题:关于java语法
- 大量数据数组去重
- 求org.xml.sax.SAXParseException: Content is not allowed in prolog.异常解决
- svn一个问题
at ch06_2.ManyToManyTest.test1(ManyToManyTest.java:17)
at ch06_2.ManyToManyTest.main(ManyToManyTest.java:13)
将 <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!