Hibernate,与复合键的一对多关联

时间:2014-09-29 09:58:51

标签: java mysql hibernate one-to-many composite-key

我想问一下我目前如何通过Hibernate在数据库中映射我的对象。这是问题陈述:

  

我有两个实体,User和Message。用户可以与许多消息相关联   用户由用户名唯一标识。所以主键是用户名。   消息由用户的用户名和另一个字段rxTime唯一标识。所以在这种情况下,它是一个复合键(用户名,rxTime)

以下是我目前通过XML进行映射的方法

<hibernate-mapping package="my.package">
    <class name="User" table="USERS">
        <id name="username" column="USERNAME_ID"> </id>
        <set name="messages" table="MESSAGES"
                inverse="true" lazy="false" fetch="select">
            <key>
                <column name="USERNAME_ID" not-null="true" />
            </key>
            <one-to-many class="Message" />
        </set>
    </class>

</hibernate-mapping>

<hibernate-mapping package="my.package">
    <class name="Message" table="MESSAGES">
        <composite-id >
            <key-many-to-one name="user" class="User" column="USERNAME_ID"/>
            <key-property name="startRxTime" column="startRxTime"/>         
        </composite-id>

    </class>
</hibernate-mapping>

问题: - 我做得对吗?我是hibernate的新手,我不确定这是做一对多关联的正确方法。 - 查询数据库时遇到一些性能问题。当我尝试通过RxTime获取消息列表时,我看到许多查询都是由hibernate生成的,以获得结果。这将是接下来要调查的事情,但我担心我映射对象的方式导致这种低效率。是不是?

我知道这看起来像是一个简单的数据库设计,但在网络上我找到了很多不同的方法来做到这一点,我不清楚哪个是最好的。

非常感谢您最终的回复。

干杯

0 个答案:

没有答案