Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用HQL查询关联表_Java_Hibernate_Hql - Fatal编程技术网

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();