我有两个具有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实现此目的。
答案 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
)区分winners
与User
而不是关系名称?
答案 2 :(得分:1)
List<Matchs> list = session.createQuery("from Matchs matchs where matchs.users.username=:username").setParameter("username","myname").list();