2013-07-11 5 views
0

Мне нужно сделать Внутреннее соединение между двумя таблицами, но безуспешно, я должен найти всех пациентов, связанных с конкретным пользователем, я пытался запросить безрезультатно. Я использую mysql и hibernate 3.6.4. Это мой кодвнутреннее соединение между двумя таблицами Hibernate

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 + "]"; 
    } 

} 

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; 
} 

файл конфигурации Hibernate

<?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> 
+0

ли вам «User_Patient» таблицы имеют поле «идентификатор "и" userName "? – mael

+0

Где ваш запрос? – willome

+1

Запрашиваемый запрос. – Kartik73

ответ

0

Нет необходимости в явном соединении. С версией Hibernate, которые имеют HHH-5209 фиксированы, запрос может быть записан следующим образом:

SELECT p 
FROM Patient p 
WHERE :particularUser MEMBER OF p.users 

В старых версиях в элементах может быть использован вместо:

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