在java中多对多表查询_具有多对多关系的多个表中的JPA查询

有三个表:Hospital,Medical_Service并且Language_Service,医院能提供的医疗服务和语言服务。因此,存在两个多对多关系。

现在,我想使用postcode = 3000和搜索医院数据medical service = Emergency。

DaoImpl:

public List findByPostcodeAndMedicalType(String postcode, String medical) {

String str = "SELECT h FROM Hospital h INNER JOIN Medical_Service m ON h.hospital_id = m.hospital_id WHERE "

+ "h.Postcode = :postcode AND m.Medical_name = :medical";

Query query = em.createQuery(str);

query.setParameter("postcode", postcode);

query.setParameter("medical", medical);

return query.getResultList();

}

而且,如果我想从三个表中按邮政编码,医疗类型和语言进行搜索,那么如何编写一个jsql。

警告:

错误:org.hibernate.hql.internal.ast.ErrorCounter-

预期加入的路径!希望加入的路径!在org.hibernate.org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3858)在org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:378)

.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3644)

2016年4月2日晚上10:54:30 org.apache.catalina.core.StandardWrapperValve在路径[/

travel]的上下文中为Servlet

[appServlet]调用SEVERE:Servlet.service()引发异常[请求处理失败;嵌套异常是java.lang.IllegalArgumentException:org.hibernate.QueryException:

无法解析属性:邮政编码 的:com.health.entity.Hospital

[从com.health.entity.Hospital中选择h在IN.JOIN JOIN Medical_Service中启用h.hospital_id

= m.hospital_id在哪里h.Postcode =:postcode和m.Medical_name

=:medical]根本原因是org.hibernate.QueryException:无法解析属性:org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)上com.health.entity.Hospital的邮政编码:org.hibernate.persister.entity

org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1978)的.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)在org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java

:367)

医院级

@Entity

@Table(name = "Hospital")

public class Hospital {

@Id

@GeneratedValue

private int hospital_id;

private String hospital_name;

private String postcode;

private String suburb;

private String address;

private String type;

private String category;

private String longitude;

private String latitude;

private String email;

private String website;

private String phoneno;

private String isemergency;

private String agencytype;

private String fax;

@ManyToMany

@JoinTable(

name = "Hospital_Medical",

joinColumns=@JoinColumn(name="Hospital_id", referencedColumnName="Hospital_id"),

inverseJoinColumns=@JoinColumn(name="Medical_id", referencedColumnName="Medical_id"))

private List services;

@ManyToMany

@JoinTable(

name = "Hospital_Language",

joinColumns=@JoinColumn(name="Hospital_id", referencedColumnName="Hospital_id"),

inverseJoinColumns=@JoinColumn(name="Language_id", referencedColumnName="Language_id"))

private List languages;

//Setter and Getter

}

MedicalService.class

@Entity

@Table(name = "Medical_Service")

public class MedicalService {

@Id

private int medical_id;

private String medical_name;

private String description;

@ManyToMany(mappedBy="services")

private List hospitals;

//Setter and Getter

}

语言类

@Entity

@Table(name = "Language")

public class Language {

@Id

private int language_id;

private String language_name;

private String display_name;

@ManyToMany(mappedBy="languages")

private List hospitals;

//Setter and Getter

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值