import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import hib.po.Message;
public class Testms {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure()
.buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
Query query = session
.createQuery("FROM Message m WHERE m.userinfo.id=1 ");
List<Message> list = query.list();// 这行抛出的异常
Iterator<Message> it = list.iterator();
while (it.hasNext()) {
Message m = it.next();
System.out.println(m.getUserinfo());
System.out.println(m.getTitle());
System.out.println(m.getContent());
}
session.close();
}
}我是从从表里查询,表里有Id相同的数据也就是有数据时会报异常Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.java:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.test.action.Testms.main(Testms.java:33)没有数据就不会报(当然我要查出有数据的了)如果把Message.hbm.xml里的
<many-to-one name="userinfo" class="hib.po.Userinfo" cascade="all" fetch="select">
<column name="user_id" />
</many-to-one>
这些删掉 再把查询语句改为
Query query = session
.createQuery("FROM Message where user_id=1 ");
这样不会报错可以查出数据 可是这样也就没意义了不是多表又不是级联而且影响到其他功能(保存删除等)有高手帮我解决这个问题吗,困扰了多时---------------------------------------下面是相关的hbm
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="hib.po.Userinfo" table="userinfo" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="32" not-null="true" unique="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="32" not-null="true" />
</property>
<property name="pubdate" type="java.util.Date">
<column name="pubdate" length="19" />
</property>
<set name="messages" inverse="true" cascade="save-update" lazy="false">
<key>
<column name="user_id" />
</key>
<one-to-many class="hib.po.Message" />
</set>
</class>
</hibernate-mapping>
--------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="hib.po.Message" table="message" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<many-to-one name="userinfo" class="hib.po.Userinfo" cascade="all" fetch="select">
<column name="user_id" />
</many-to-one>
<property name="title" type="java.lang.String">
<column name="title" length="32" not-null="true" />
</property>
<property name="content" type="java.lang.String">
<column name="content" length="2000" />
</property>
<property name="pubdate" type="java.util.Date">
<column name="pubdate" length="19" />
</property>
<set name="replymessages" inverse="true" cascade="save-update" lazy="false">
<key>
<column name="message_id" />
</key>
<one-to-many class="hib.po.Replymessage" />
</set>
</class>
</hibernate-mapping>
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import hib.po.Message;
public class Testms {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure()
.buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
Query query = session
.createQuery("FROM Message m WHERE m.userinfo.id=1 ");
List<Message> list = query.list();// 这行抛出的异常
Iterator<Message> it = list.iterator();
while (it.hasNext()) {
Message m = it.next();
System.out.println(m.getUserinfo());
System.out.println(m.getTitle());
System.out.println(m.getContent());
}
session.close();
}
}我是从从表里查询,表里有Id相同的数据也就是有数据时会报异常Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.java:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.test.action.Testms.main(Testms.java:33)没有数据就不会报(当然我要查出有数据的了)如果把Message.hbm.xml里的
<many-to-one name="userinfo" class="hib.po.Userinfo" cascade="all" fetch="select">
<column name="user_id" />
</many-to-one>
这些删掉 再把查询语句改为
Query query = session
.createQuery("FROM Message where user_id=1 ");
这样不会报错可以查出数据 可是这样也就没意义了不是多表又不是级联而且影响到其他功能(保存删除等)有高手帮我解决这个问题吗,困扰了多时---------------------------------------下面是相关的hbm
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="hib.po.Userinfo" table="userinfo" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="32" not-null="true" unique="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="32" not-null="true" />
</property>
<property name="pubdate" type="java.util.Date">
<column name="pubdate" length="19" />
</property>
<set name="messages" inverse="true" cascade="save-update" lazy="false">
<key>
<column name="user_id" />
</key>
<one-to-many class="hib.po.Message" />
</set>
</class>
</hibernate-mapping>
--------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="hib.po.Message" table="message" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<many-to-one name="userinfo" class="hib.po.Userinfo" cascade="all" fetch="select">
<column name="user_id" />
</many-to-one>
<property name="title" type="java.lang.String">
<column name="title" length="32" not-null="true" />
</property>
<property name="content" type="java.lang.String">
<column name="content" length="2000" />
</property>
<property name="pubdate" type="java.util.Date">
<column name="pubdate" length="19" />
</property>
<set name="replymessages" inverse="true" cascade="save-update" lazy="false">
<key>
<column name="message_id" />
</key>
<one-to-many class="hib.po.Replymessage" />
</set>
</class>
</hibernate-mapping>
解决方案 »
- 第一次发帖 不知道在哪里。。求助
- java线程执行顺序的小问题
- 请问一个webservice的问题,我写了WebService部署到了服务器,
- session 问题 简单
- Cron表达式
- 求助高人 :web service访问的问题
- mybatis if标签判断的问题
- 高分请教<<J2EE应用开发(weblogic+JBuilder)>>一书中实例的调试问题??
- 怎样能验证weblogic6.1+jbuilder7+sqlserver7有没有配置成功呢?
- 在weblogic7.0中怎么部署servlet?
- SSH的表连接的查询,怎么做啊??????很急很急啊!
- struts,servlet 中各用什么方法实现跳转,各有哪些参数
<column name="user_id" />
</many-to-one>
该为join
.buildSessionFactory();
是不是configure(没有放xml路径),这是自己写的,还是自动生成。
用写么?我单独测试 我是ssh框架做的高手给能给点提示么?
用写么?我单独测试 我是ssh框架做的高手给能给点提示么?
呵呵 这个问题已经解决了<many-to-one name="userinfo" class="hib.po.Userinfo" cascade="all" fetch="select" lazy="false">
<column name="user_id" />