Java 用HQL查询关联表
我有两个实体类,具有一对一关系:Java 用HQL查询关联表,java,hibernate,hql,Java,Hibernate,Hql,我有两个实体类,具有一对一关系: @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
@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
}
此查询引发org.hibernate.QueryException。我如何使用HQL实现这一点。您似乎在获取列上的数据,而该列在您的
匹配表中不存在。在您的匹配类中,我没有看到任何列或关系来自用户所在匹配的用户名。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
}
公共类匹配{
@Id@GeneratedValue
私有长匹配ID;
私有整数大小;
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name=“Match\u Users”,joinColumns=@JoinColumn(name=“Match\u id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”))
私人名单用户;
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name=“Match\u winners”,joinColumns=@JoinColumn(name=“Match\u id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”))
私人名单获奖者;
//接球手和接球手
}
在原始查询中,如何使用实体名称(User
)而不是关系名称来区分用户
和赢家
?List List=session.createQuery(“from Matchs Matchs where Matchs.users.username=:username”).setParameter(“username”,“myname”).List();
List<Matchs> list = session.createQuery("from Matchs matchs where matchs.users.username=:username").setParameter("username","myname").list();
请解释此代码的作用和工作原理。我尝试了第二种方法并得到以下异常:org.hibernate.QueryException:非法尝试使用元素属性引用[username]取消对集合[{synthetic alias}{non-qualified property ref}users]的引用[来自com.kyrogaming.models.Matchs WHERE users.username=:user]
List<Matchs> list = session.createQuery("from Matchs matchs where matchs.users.username=:username").setParameter("username","myname").list();