简体   繁体   中英

Retrieve data from multiple tables in hibernate

I have 2 tables namely subscriber and contact. Tables look something like this:

subscriber -> id, contact_id //contact_id is a foreign key
contact -> id, firstName, lastName, email, contactType

My Contact.hbm.xml file looks like this:

<hibernate-mapping>
    <class name="com.DBNAME.model.Contact" table="contact" >

        <id name="id" type="int">
            <column name="id" />
            <generator class="identity" />
        </id>

        <property name="contactType" type="int">
            <column name="contactType" sql-type="TINYINT"></column>
        </property>
        <property name="firstName" type="string">
            <column name="firstName"></column>
        </property>
        <property name="lastName" type="string">
            <column name="lastName"></column>
        </property>
    </class>
</hibernate-mapping>

And my Subscriber.hbm.xml file looks like this :

<hibernate-mapping>
    <class name="com.DBNAME.model.Subscriber" table="subscriber" >

        <id name="id" type="int">
            <column name="id" />
            <generator class="identity" />
        </id>

        <many-to-one name="contact" class="com.DBNAME.model.Contact" column="contact_id" unique="true" fetch="join"/>
    </class>

</hibernate-mapping>

Now I want to retrieve a simple Subscriber object in which contact gets mapped automatically. So what I do in Java code is :

/**
     * get Subscribers
     */
    @SuppressWarnings("unchecked")
    private void getSubscribersWithContactDetails() {
        Session session = HibernateUtils.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        try {
            setSubscribers((List<Subscriber>)session.createQuery("from Subscriber").list());
        } catch (HibernateException e) {
            session.getTransaction().rollback();
        } finally {
            session.getTransaction().commit();
        }
        }

/**
     * @param subscribers the subscribers to set
     */
    public void setSubscribers(List<Subscriber> subscribers) {
        this.subscribers = subscribers;
    }

My data classes looks like the following :

    public class Contact implements Serializable {

        private static final long serialVersionUID = 1L;

        private int id;
        private int contactType;
        private String firstName;
        private String lastName;
    // Getters Setters and constructors
    }


public class Subscriber implements Serializable {
    private static final long serialVersionUID = 1L;

    private int         id;
    private Contact     contact; //Foreign Key from Contact -> id
    private int         contactId;
//Constructors, Getters and Setters
}

And my query generated by Hibernate looks like this :

select subscriber0_.id as id1_, subscriber0_.contact_id as contact2_1_ from subscriber subscriber0_

I am not getting contact details from contacts table. How will I be able to do that?

Try to use this:

 <many-to-one name="contact" 
     class="com.DBNAME.model.Contact" column="contact_id" 
     unique="true" lazy="false"/>

Ie lazy="false" and no fetch attribute.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM