我正在尝试检索并打印事件的所有参与者(对于给定的eventId),但参与者设置在运行代码后为空。这是我的Class和HBM文件。
班主任:
public class Person {
private long personId;
private String firstName;
private String lastName;
private int age;
private Set<Event> myEvents=new HashSet<Event>();
public Person() {
}
/**
* @return the personId
*/
public long getPersonId() {
return personId;
}
/**
* @param personId the personId to set
*/
public void setPersonId(long personId) {
this.personId = personId;
}
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the myEvents
*/
public Set getMyEvents() {
return myEvents;
}
/**
* @param myEvents the myEvents to set
*/
public void setMyEvents(Set myEvents) {
this.myEvents = myEvents;
}
}
HBM
<hibernate-mapping package="com.lc.learn.hibernate.sample.beans">
<class name="Person" table="person">
<id name="personId" column="person_id" type="long">
<generator class="increment"/>
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
<property name="age" column="age" type="integer"/>
<set name="myEvents" table="person_events" inverse="false" lazy="false" fetch="select" cascade="all">
<key column="personId"/>
<many-to-many column="eventId" class="Event"/>
</set>
</class>
</hibernate-mapping>
活动类
public class Event {
private long eventId;
private String eventTitle;
private Date eventDate;
private Set<Person> personList=new HashSet<Person>();
public Event() {
}
public Event(String eventTitle, Date eventDate) {
this.eventTitle = eventTitle;
this.eventDate = eventDate;
}
/**
* @return the eventId
*/
public long getEventId() {
return eventId;
}
/**
* @param eventId the eventId to set
*/
public void setEventId(long eventId) {
this.eventId = eventId;
}
/**
* @return the eventTitle
*/
public String getEventTitle() {
return eventTitle;
}
/**
* @param eventTitle the eventTitle to set
*/
public void setEventTitle(String eventTitle) {
this.eventTitle = eventTitle;
}
/**
* @return the eventDate
*/
public Date getEventDate() {
return eventDate;
}
/**
* @param eventDate the eventDate to set
*/
public void setEventDate(Date eventDate) {
this.eventDate = eventDate;
}
/**
* @return the personList
*/
public Set getPersonList() {
return personList;
}
/**
* @param personList the personList to set
*/
public void setPersonList(Set personList) {
this.personList = personList;
}
}
HBM:
<hibernate-mapping package="com.lc.learn.hibernate.sample.beans">
<class name="Event" table="event">
<id name="eventId" column="event_id" type="long">
<generator class="increment"/>
</id>
<property name="eventTitle" column="event_title" type="string"/>
<property name="eventDate" column="event_date" type="timestamp"/>
<set name="personList" table="person_events" inverse="true" lazy="false" fetch="select">
<key column="event_id"/>
<many-to-many column="person_id" class="Person"/>
</set>
</class>
</hibernate-mapping>
DAL:
public class EventManager {
public Event getEventById(long eventId){
Event eObj=null;
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx=session.getTransaction();
tx.begin();
eObj=(Event)session.get(Event.class, eventId);
eObj.setPersonList(eObj.getPersonList());
//Hibernate.initialize(eObj.getPersonList());
tx.commit();
return eObj;
}
}
主类:
public class MyHibernateSample {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
EventManager eManager=new EventManager();
Event eObj= eManager.getEventById(1);
Iterator it=eObj.getPersonList().iterator();
while(it.hasNext()){
Person pObj=(Person)it.next();
System.out.println("First Name : "+pObj.getFirstName()+" Last Name : "+pObj.getLastName()+" Age : "+pObj.getAge());
}
}
}
任何人请帮我解决这个问题。 谢谢 利
答案 0 :(得分:0)
我注意到在Person
的映射中,使用camelCase名称指定连接表中的列:
<key column="personId"/>
<many-to-many column="eventId" class="Event"/>
但是在Event
的映射中,它们有下划线名称:
<key column="event_id"/>
<many-to-many column="person_id" class="Person"/>
那些应该是相同的,它们应该与数据库中的列名相同。我希望这个映射失败,但失败很大,数据库异常报告没有找到某个列或其他列。