我有一个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
答案 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,没有看到你的对象模型和映射,看起来很难准确,我的建议是:
如果您希望得到更详细的答案,IMO应该提供更多详细信息。