使用HQL查询关联表

时间:2013-08-24 02:18:08

标签: java hibernate hql

我有两个具有oneToMany关系的Entity类:

@Entity
@XmlRootElement
@DynamicInsert (value = true)
@DynamicUpdate (value = true)
public class Matchs {

   @Id @GeneratedValue
   private Long matchId;
   private int size;

   @OneToMany(fetch = FetchType.LAZY)
   @JoinTable(name = "Match_Users",joinColumns=@JoinColumn(name="match_id"),
   inverseJoinColumns=@JoinColumn(name="user_id"))
   private List<User> users;

      //Getters & Setters
}

@Entity
@XmlRootElement
@DynamicInsert (value = true)
@DynamicUpdate (value = true)
public class User {

    @Id
    private String username;
    private String lastName,firstName,password,email;

    private Date dateOfBirth;
        //Getters & Setters
  }

我想获得特定用户的所有匹配。这是我的查询:

 FROM Matchs WHERE User.username=:username 

此查询抛出org.hibernate.QueryException。如何使用HQL实现此目的。

3 个答案:

答案 0 :(得分:1)

您似乎正在获取Matchs表中不存在的列上的数据。我在Matchs

} username课程中没有看到任何专栏或关系

答案 1 :(得分:1)

FROM Matchs WHERE users.username=:username
在HQL中,您必须指定关系名称(用户),而不是目标实体(用户);会发生什么事:你有:

public class Matchs {

   @Id @GeneratedValue
   private Long matchId;
   private int size;

   @OneToMany(fetch = FetchType.LAZY)
   @JoinTable(name = "Match_Users",joinColumns=@JoinColumn(name="match_id"),
   inverseJoinColumns=@JoinColumn(name="user_id"))
   private List<User> users;

   @OneToMany(fetch = FetchType.LAZY)
   @JoinTable(name = "Match_winners",joinColumns=@JoinColumn(name="match_id"),
   inverseJoinColumns=@JoinColumn(name="user_id"))
   private List<User> winners;

      //Getters & Setters
}

如何在原始查询中使用实体名称(users)区分winnersUser而不是关系名称?

答案 2 :(得分:1)

 List<Matchs> list = session.createQuery("from Matchs matchs where matchs.users.username=:username").setParameter("username","myname").list();