2

我有两个具有 oneToMany 关系的实体类:

@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 做到这一点。

4

3 回答 3

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使用winners实体名称 ( User) 而不是关系名称?

于 2013-08-24T07:05:07.397 回答
1
 List<Matchs> list = session.createQuery("from Matchs matchs where matchs.users.username=:username").setParameter("username","myname").list();
于 2013-08-24T07:22:21.467 回答
1

您似乎正在获取表中不存在的列上的数据MatchsMatchs我在您的班级中没有看到任何列或关系username

于 2013-08-24T02:20:05.513 回答