带NOT IN的HQL查询SELECT

时间:2012-11-17 07:42:45

标签: sql hibernate hql

我需要一个HQL查询,但我不知道。

SELECT * FROM Poll WHERE pid NOT IN (
SELECT pid FROM votes WHERE uid =  'theuserid')

我希望所有民意调查清单回到表格投票存在的不在的位置。

也有帮助的是hql查询,其中 表中的uid存在,但我猜这非常相似; - )

这是两个类:

public class Poll {

private int pid;
private String name;
private String description;
private Date deadline;
private Set<Team> teams = new HashSet<Team>(0);
//some getter & setter
}

public class Vote {

private int vid;
private String uid;
private int pid;
private int tid;
private int votes;
//some getter & setter
}

请smbdy请帮助我。我想这是一个WHERE而不是喜欢的连接,但我只是不明白。

的Merci!

这是hibernate映射:

 <hibernate-mapping>
 <class name="package.model.Poll" table="poll">
 <id name="pid" column="pid" >
 <generator class="increment"/>
 </id>
<property name="name" column="name" />
<property name="description" column="description" />
<property name="deadline" type="timestamp" column="deadline" />

<set name="teams" table="pollchoice" 
        inverse="false" lazy="false" fetch="select" cascade="all" >
        <key>
            <column name="pid" not-null="true" />
        </key>
        <many-to-many entity-name="knt.exceedvote.model.Team">
            <column name="tid" not-null="true" />
        </many-to-many> 
</set>
 </class>
 </hibernate-mapping> 

 <hibernate-mapping>
   <class name="package.model.Vote" table="votes">
    <id name="vid" column="vid" >
    <generator class="increment"/>
   </id>
<property name="pid" column="pid" />
<property name="uid" column="uid" />
<property name="tid" column="tid" />
<property name="votes" column="votes" />


  </class>
 </hibernate-mapping>

1 个答案:

答案 0 :(得分:1)

请记住, Hibernate的设计使用Object Graph 的概念,这是关系对象的名称。

您的映射中缺少核心概念(投票和投票似乎是孤立的)因此我怀疑您可以在其当前状态下使用HQL

在我看来,你有两个选择:

  1. 定义PollpidVoteuid之间的关系。然后你应该能够写出简单的HQL

  2. 通过Hibernate会话本身使用本机SQL。