在编写映射文件和理解映射实体的最佳实践时,我是Hibernate的新手。不一定是POJO。
我的数据库中role
和message
之间定义了多对多关系。这个想法是可以在此应用程序中为角色(思考用户组)分配消息,并且可以将消息分配给许多角色。这用于提供将消息传递给应用程序中的用户组的手段。
我不一定希望我的对象模型直接反映这种多对多关系。例如,我不一定希望我的Role对象能够了解有关Messages的任何信息,而且我并不希望Message上有一个Roles集合(尽管如果看起来这样最好,我可能会对此产生影响)。我的想法是,在这种情况下,我宁愿有一个服务
我目前同时映射了Message
和Role
,但我 不 映射了链接表message_role
。< / p>
所以,我有几个关于如何查询角色消息的问题:
所以,由于我不确定,我实际上正在使用一个看起来像这样的命名查询:
&lt; sql-query name =“loadRoleMessages”&gt;
<![CDATA[
select m.*
from message m
right join message_role mr on m.message_id=mr.message_id
where
m.effective_date <= :date
and m.expiration_date >= :date
and mr.role_id in (:roleIds)
]]>
&LT; / SQL查询&GT;
(抱歉,由于某种原因无法获取格式以包含sql-query标记)
这实际上有效,但我从查询中返回List<Object[]>
而不是List<Message>
。其中Object[]
表示要返回的列。我理解这是因为查询没有引用Message实体,因此Hibernate不知道根据查询结果创建Message对象。根据我的发现,似乎无法将实体加入HQL中的非实体表。
所以,我只是在寻找一些输入(1)是否有一个首选/最佳实践来映射数据库中相关(多对多)的两个实体(角色/消息),但我不一定希望它们在POJO中如此映射。如果没有,我是否坚持使用我的sql-query然后只是在这个查询的情况下手动构建Message POJO?
答案 0 :(得分:0)
我继续并映射了多对多关系,以便Message上有一组Roles。我认为这是可以的,它还应该简化为特定角色创建的持久消息,以便自动保持关系。我假设如果我以这种方式映射这种关系,那么我将不得不手动插入链表记录作为它自己的独立实体......这是不可取的/漂亮的。
如果还有其他角度我尚未考虑过,我仍然可以输入,但是现在我可以使用带有角色映射的Message。