连接表以填充实体列表

时间:2013-01-04 12:31:56

标签: sql hibernate jpa

我正在使用JPA和Hibernate,但是至少对我来说,构建HQL我的需求太复杂了。 我决定使用原生SQL。 我需要用他们的子列表获取一些记录/实体,但是,我需要过滤孩子,我不想要所有的孩子。 这可能吗?

例如,我有三个表,如

conversation_table: ID

mail_table: id,conversation_id,sender_id

USER_TABLE: id,married_bool

我需要conversation个实体,这些实体的列表由mail填充,由已婚用户发送。

到目前为止我试过了

Select * from conversation_table join mail_table on ( mail_table.sender_id=user_table.id and user_table.married_bool=true) 

我收到的错误如下:

user_table is unknown

我试过

Select * from (conversation_table, user_table, mail_table) join mail_table on ( mail_table.sender_id=user_table.id and user_table.married_bool=true)

我正在

mail_table is non unique table/alias

这只是一个很好的例子,还需要填写其他表中的邮件实体的一些实体列表,例如recipient_table,我想我必须在原生查询中添加连接子句来填充这些,我是对的吗?此外,当我尝试使用此附加连接子句时,我会收到“未知”/“非唯一别名”错误。

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

这样的事情:

SELECT *
FROM conversation_table CT
   JOIN mail_table MT
      ON CT.Id = MT.conversation_id
   JOIN user_id UI
      ON MT.sender_id=UI.id
WHERE UT.married_bool = 1 

答案 1 :(得分:1)

如果你真的想在这个查询中使用Hibernate ORM,那么Criteria Query就是最好的方法。最近,我有相同的要求,只使用了Criteria。