Java 两个表之间的内部联接休眠

Java 两个表之间的内部联接休眠,java,hibernate,hql,Java,Hibernate,Hql,我需要在两个表之间进行内部连接,但没有成功,我必须找到与特定用户相关的所有患者,我尝试查询但没有成功。 我正在使用mysql和Hibernate3.6.4。 这是我的密码 Patient.java @Entity public class Patient { @Id private int id; private String paitentFirstName; private String paitentLastName; private Date d

我需要在两个表之间进行内部连接,但没有成功,我必须找到与特定用户相关的所有患者,我尝试查询但没有成功。 我正在使用mysql和Hibernate3.6.4。 这是我的密码

Patient.java

@Entity
public class Patient {

    @Id
    private int id;
    private String paitentFirstName;
    private String paitentLastName;
    private Date dateOfbirth;
    private String sex;
      @ManyToMany(cascade = {CascadeType.ALL})
        @JoinTable(name="User_Patient", 
                    joinColumns={@JoinColumn(name="id")}, 
                    inverseJoinColumns={@JoinColumn(name="userName")})
        private Set<User> users = new HashSet<User>();


    public Set<User> getUsers() {
        return users;
    }
    public void setMeetings(Set<User> users) {
        this.users = users;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getPaitentFirstName() {
        return paitentFirstName;
    }
    public void setPaitentFirstName(String paitentFirstName) {
        this.paitentFirstName = paitentFirstName;
    }
    public String getPaitentLastName() {
        return paitentLastName;
    }
    public void setPaitentLastName(String paitentLastName) {
        this.paitentLastName = paitentLastName;
    }
    public Date getDateOfbirth() {
        return dateOfbirth;
    }
    public void setDateOfbirth(Date dateOfbirth) {
        this.dateOfbirth = dateOfbirth;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Patient [id=" + id + ", paitentFirstName=" + paitentFirstName
                + ", paitentLastName=" + paitentLastName + ", dateOfbirth="
                + dateOfbirth + ", sex=" + sex + "]";
    }

}
@实体
公立病人{
@身份证
私有int-id;
私有字符串paitentFirstName;
私有字符串paitentLastName;
私人出生日期;
私密性;
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name=“User\u Patient”,
joinColumns={@JoinColumn(name=“id”)},
inverseJoinColumns={@JoinColumn(name=“userName”)}
private Set users=new HashSet();
公共集getUsers(){
返回用户;
}
公共会议(集合用户){
this.users=用户;
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getPaitentFirstName(){
返回paitentFirstName;
}
public void setPaitentFirstName(字符串paitentFirstName){
this.paitentFirstName=paitentFirstName;
}
公共字符串getPaitenLastName(){
返回paitentLastName;
}
public void setPaitenLastName(字符串PaitenLastName){
this.paitentLastName=paitentLastName;
}
公共日期getDateOfbirth(){
出生返回日期;
}
公共无效设置出生日期(出生日期){
this.dateOfbirth=出生日期;
}
公共字符串getSex(){
回归性;
}
公共无效集合(字符串性别){
这个。性=性;
}
@凌驾
公共字符串toString(){
return“Patient[id=“+id+”,paitentFirstName=“+paitentFirstName
+,paitentLastName=“+paitentLastName+”,出生日期=“
+出生日期+”,性别=“+sex+”];
}
}

User.java

@Entity
public class User {



    @Id
    private String UserName;

     @ManyToMany(mappedBy="users")
        private Set<Patient> patients = new HashSet<Patient>();

    public String getUserName() {
        return UserName;
    }
    public void setUserName(String userName) {
        UserName = userName;
    }
    public Set<Patient> getEmployees() {
        return patients;
    }
    public void setEmployees(Set<Patient> patients) {
        this.patients = patients;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    private String password;
}
@实体
公共类用户{
@身份证
私有字符串用户名;
@多人(mappedBy=“用户”)
private Set patients=new HashSet();
公共字符串getUserName(){
返回用户名;
}
public void setUserName(字符串用户名){
用户名=用户名;
}
公共集合getEmployees(){
返回病人;
}
公立医院员工(Set患者){
这是病人=病人;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
私有字符串密码;
}

休眠配置文件

   <?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test2</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1234</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <!-- Names the annotated entity class -->
        <mapping class="com.objects.Patient"/>
        <mapping class="com.objects.User"/>

    </session-factory>

</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test2
根
1234
1.
org.hibernate.dialogue.mysqldialogue
org.hibernate.cache.NoCacheProvider
真的
更新

不需要显式联接。 对于Hibernate版本,如果没有修复,则可以按如下方式编写查询:

SELECT p
FROM Patient p
WHERE :particularUser MEMBER OF p.users
对于元素中的旧版本,可以改为使用:

SELECT p
FROM Patient p
WHERE :particularUser IN ELEMENTS (p.users)

您的“用户\患者”表是否有字段“id”和“用户名”?您的查询在哪里?您尝试过的查询后。@mael是我有这个表,我尝试过这个查询,但它不起作用从患者p内部选择p作为Where a.id=“患者id”