gpt4 book ai didi

java - hibernate如何从一对多关系中选择多方

转载 作者:行者123 更新时间:2023-12-01 14:11:21 25 4
gpt4 key购买 nike

大家。我是使用 Hibernate 的新手。

所以在这里我面临一个问题,我有一个如下所示的实体:

<class name="cn.edu.scau.librarica.dao.MessageSession" table="msg_session">
<id name="msid" type="long" unsaved-value="null">
<generator class="identity"/>
</id>

<list name="msgs" cascade="all">
<key column="msid"
update="false" unique="true" not-null="true"/>
<list-index column="list_index"/>
<one-to-many class="Message" />
</list>
</class>

现在我想要实现的是:

    select Message m where msid=# and m.t<## and m.t>###

我如何用 Criteria 来表示它?
提前感谢您的关注和建议。

<小时/>

更新
作为答案指南之一,我得到了复合元素不可查询的观点,所以我制作了一个双向一对多映射(更改在上面)现在我可以查询,但现在我发现了另一个问题:
如何将复合 ID 与外键映射
消息是这样的映射:

<class name="Message">
<composite-id>
<generator class="foreign">
<!-- What here??? -->
</generator>
</composite-id>
</class>

按照指示,一对多可能使用set而不是list,所以我很难找到满足我需要的示例(因为消息应该被订购)。
有什么建议吗?我仍在寻找那个。感谢您的帮助。

最佳答案

您不能直接选择消息,因为它是组件而不是实体。组件没有独立的生命周期。它们无法自行查询、创建或删除,始终必须通过它们嵌入的实体(在您的情况下为 MessageSession)来访问它们。

要使其成为实体,表应该有自己的主键。就你而言,情况似乎并非如此。您将需要更改架构,以便与 Message 对应的表具有主键,并将映射更改为使用一对多而不是复合元素。

如果您做不到这一点,您将不得不查询 MessageSession 并从中获取消息。

P.S:Hibernate 相当复杂,我还没有看到太多人能够在尝试过程中学会它。如果您花一些时间研究基本概念(这比映射和查询更重要),您更有可能成功。

关于java - hibernate如何从一对多关系中选择多方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18507454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com