hibernate开发 空指针问题
在进行many-to-many映射的时候,提示为空指针。
配置为Person.hbm.xml:
<?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 " >
<hibernate-mapping>
<class name= "com.cqmc.Person " table = "PERSON ">
<id name = "id " column = "PERSON_ID ">
<generator class= "increment "> </generator>
</id>
<property name= "age " column= "AGE "> </property>
<property name= "firstName " column= "FIRSTNAME "> </property>
<property name= "lastName " column= "LASTNAME "> </property>
<set name= "events " table = "PERSON_EVENT ">
<key column= "PERSON_ID "/>
<many-to-many column= "EVENT_ID " class= "com.cqmc.Event "/>
</set>
</class>
</hibernate-mapping>
CODE:
/**
* Created on 2007-1-9 17:00:00
*
* @author fanxue.bu
*
* @company Chongqing Justin Mobile Business Co.,Ltd.
*
*/
package com.cqmc;
import java.util.*;
public class Person {
private Set events = new HashSet();
private long id;
private Integer age;
private String firstName;
private String lastName;
public Person(){
}
public void setEvents(Set events){
this.events =events;
}
public Set getEvents(){
return this.events;
}
private void setId(long id){
this.id = id ;
}
public long getId(){
return this.id ;
}
public void setAge(Integer age){
this.age = age;
}
public Integer getAge(){
return this.age;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getFirstName(){
return this.firstName;
}
public void setlastName(String lastName){
this.lastName = lastName;
}
public String getlastName(){
return this.lastName;
}
}
主程序代码:
package com.cqmc;
import org.hibernate.*;
import java.util.Date;
import util.HibernateUtil;
import java.util.*;
import java.text.*;
import org.hibernate.cfg.*;
public class EventManager {
public static void main(String[] args)throws Exception{
EventManager mgr = new EventManager();
//mgr.deleteDate();
try{
Long personId =mgr.createAndStorePerson( "fanxue ", "bu ");
Long eventId = mgr.createAndStoreEvent( "EventId ",new Date());
mgr.addPersonToEvent(personId,eventId);
}catch(HibernateException ex){
ex.printStackTrace();
System.out.println( "message: "+ex.getMessage());
}
//Long personId =mgr.createAndStorePerson()
//mgr.createAndStoreEvent( "My Event ",new Date());
/*List list = mgr.listEvents();
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss ");
for(int i =0; i < list.size(); i++){
Event event = (Event)list.get(i);
System.out.println( "Date: "+sdf.format(event.getDate())+ " Title: "+event.getTitle()+ " ID: "+event.getId());
}*/
HibernateUtil.getSessionFactory().close();
}
/**
* @param title
* @param theDate
*/
private Long createAndStorePerson(String firstName,String lastName)throws Exception{
Session session =HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
//System.out.println( "Begin.! Person. ");
//for(int i =1; i <20;i ++){
int i =1;
//Integer t = (Integer.valueOf(i));
Person thePerson = new Person();
thePerson.setAge(Integer.valueOf(i));
thePerson.setFirstName(firstName);
thePerson.setlastName(lastName);
System.out.println( "1 rows insert. ");
//}
session.getTransaction().commit();
return Long.valueOf(1);
}
private Long createAndStoreEvent(String title,Date theDate)throws Exception{
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
//System.out.println( "Begin! ");
//for(int i =0; i <20; i++){
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
//System.out.println( "1 rows insert.! ");
//}
//System.out.println( "Success! ");
session.getTransaction().commit();
return Long.valueOf(1);
}
private void addPersonToEvent(Long personId,Long eventId){
try{
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Person aperson=(Person)session.load(Person.class,personId);
System.out.println( "8888888888 ");
System.out.println(aperson);
Event event =(Event)session.load(Event.class,eventId);
System.out.println(event);
aperson.getEvents().add(event);
session.getTransaction().commit();
}catch(HibernateException ex){
ex.printStackTrace();
System.out.println( "--- "+ex.getMessage());
}catch(Exception ex){
ex.printStackTrace();
System.out.println( "==== "+ex.getMessage());
}
}
}
报错误为:
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:891)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:810)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:803)
at com.cqmc.EventManager.addPersonToEvent(EventManager.java:84)
at com.cqmc.EventManager.main(EventManager.java:16)
====null
[解决办法]
??