使用Hibernate根据另一个表中的记录数来提取记录

时间:2010-08-18 20:56:09

标签: java sql hibernate

我有一个Users表,其中包含两种不同类型的用户(A和B)。 A类用户可以与B类用户建立关系(记录在“关系”表中)。类型A用户与B类用户可以拥有的关系数记录在另一个表的字段中。

我想让Hibernate返回所有未建立所有关系的A类用户。我有一个SQL查询,它会做到这一点。我需要做什么?

修改

我已经设法通过将我的查询抛入session.createSQLQuery()来实现这一点,但是在所有这些非常棒的hibernate代码中有一块SQL似乎很奇怪。我想,如果可能的话,我会在HSQL或Hibernate对象中使用它。

这是我试图转换为HSQL的伪查询:

select userId 
from (
  select user_id, max_mentees, count(connection_id) num_mentees 
  from user_table 
  join mentor on mentor_id = user_id and user_status = 'ACTIVE'
  left join connections on connection_mentor_id = mentor_id 
    and connection_status = 'ACTIVE' and connection_end > sysdate 
  group by user_id, max_mentees, connection_id
)
where (max_mentees > num_mentees) 
group by user_id

3 个答案:

答案 0 :(得分:0)

这可能会有所帮助:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#querysql-load

我知道你可以在映射文件中执行此操作;不确定它如何与注释一起使用。

答案 1 :(得分:0)

假设你有一个与MentorRelationship类有一对多关系的Mentor类,你可以这样做:

session.createQuery("from Mentor mentor where mentor.menteeRelationships.size < mentor.menteeRelationships.maxNumberOfRelationships")

答案 2 :(得分:0)

  

我想让Hibernate返回所有未建立所有关系的A类用户。我有一个SQL查询,它会做到这一点。我需要做什么?

老实说,你的问题仍然很不清楚(至少对我来说)并且没有看到SQL,没有看到你的对象模型和映射,看起来很难准确,我的建议是:

  • 将SQL转换为HQL~或〜
  • 将您的查询作为Native Query
  • 运行

如果您希望得到更详细的答案,IMO应该提供更多详细信息。