0

我需要一个 HQL 查询,但我就是不明白。

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

我希望所有投票列表都返回表中不存在uid的投票。

同样有用的是 hql 查询,其中存在表投票中的 uid 但我想这非常相似;-)

这些是2个类:

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 而不是 LIKE 的连接,但我就是不明白。

谢谢!

这是顺便说一句的休眠映射:

 <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>
4

1 回答 1

1

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

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

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

  1. Poll定义,pidVote,之间的关系uid。那你应该可以写简单的了HQL

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

于 2012-11-17T07:52:19.953 回答