Java 两个表之间的内部联接休眠
我需要在两个表之间进行内部连接,但没有成功,我必须找到与特定用户相关的所有患者,我尝试查询但没有成功。 我正在使用mysql和Hibernate3.6.4。 这是我的密码 Patient.javaJava 两个表之间的内部联接休眠,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
@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”