作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家。我是使用 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/
我是一名优秀的程序员,十分优秀!