0

我正在尝试检索并打印事件的所有参与者(对于给定的 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>

达尔:

 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());
    }
}
}

任何人请帮我解决这个问题。谢谢李

4

1 回答 1

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"/>

这些应该是相同的,并且它们应该与数据库中的列名相同。我预计这个映射会失败,但会失败得非常大声,数据库异常会报告找不到某些列或其他列。

于 2013-11-03T10:39:15.737 回答