首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在hibernate中从多个表中检索数据

在hibernate中从多个表中检索数据
EN

Stack Overflow用户
提问于 2012-04-14 03:41:48
回答 1查看 4K关注 0票数 0

我有两个表,即订阅者和联系人。表看起来像这样:

代码语言:javascript
运行
复制
subscriber -> id, contact_id //contact_id is a foreign key
contact -> id, firstName, lastName, email, contactType

我的Contact.hbm.xml文件如下所示:

代码语言:javascript
运行
复制
<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>

我的Subscriber.hbm.xml文件看起来像这样:

代码语言:javascript
运行
复制
<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>

现在,我想检索一个简单的Subscriber对象,在该对象中自动映射联系人。因此,我在Java代码中所做的是:

代码语言:javascript
运行
复制
/**
     * 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;
    }

我的数据类如下所示:

代码语言:javascript
运行
复制
    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
}

Hibernate生成的查询如下所示:

代码语言:javascript
运行
复制
select subscriber0_.id as id1_, subscriber0_.contact_id as contact2_1_ from subscriber subscriber0_

我无法从contacts表中获取联系人详细信息。我怎么才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-14 03:43:15

尝试使用以下命令:

代码语言:javascript
运行
复制
 <many-to-one name="contact" 
     class="com.DBNAME.model.Contact" column="contact_id" 
     unique="true" lazy="false"/>

lazy="false"和无fetch属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10147294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档