JPA多表查询可以使用构造器的方式进行多表查询,以下为多表查询的案例。
本案例中有A、B、C三个对象实体类,对象A、B通过属性imsi关联,对象B、C通过imsig关联;
还有一个Abc类,它是一个用来多表查询时构造集合的普通类。
以下为案例代码
A类
package com.jason.bean;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* 对象A、B通过属性imsi关联
*
* @author jason
*
*/
@Entity
public class A implements Serializable {
private static final long serialVersionUID = -8137583777189687541L;
private Integer id;
private String imsi;
private String sipss;
public A() {
super();
}
public A(String imsi, String sipss) {
super();
this.imsi = imsi;
this.sipss = sipss;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(nullable = false, length = 20)
public String getImsi() {
return imsi;
}
public void setImsi(String imsi) {
this.imsi = imsi;
}
@Column(nullable = false, length = 20)
public String getSipss() {
return sipss;
}
public void setSipss(String sipss) {
this.sipss = sipss;
}
}
B类:
package com.jason.bean;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class B implements Serializable {
private static final long serialVersionUID = 8233175635769479405L;
private Integer id;
private String imsi;
private String imsig;
private String mdn;
public B() {
super();
}
public B(String imsi, String imsig, String mdn) {
super();
this.imsi = imsi;
this.imsig = imsig;
this.mdn = mdn;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(nullable = false, length = 20)
public String getImsi() {
return imsi;
}
public void setImsi(String imsi) {
this.imsi = imsi;
}
@Column(nullable = false, length = 20)
public String getImsig() {
return imsig;
}
public void setImsig(String imsig) {
this.imsig = imsig;
}
@Column(nullable = false, length = 20)
public String getMdn() {
return mdn;
}
public void setMdn(String mdn) {
this.mdn = mdn;
}
}
C类:
package com.jason.bean;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* 对象B、C通过属性imsig关联
*
* @author jason
*
*/
@Entity
public class C implements Serializable {
private static final long serialVersionUID = -5511221269726326126L;
private Integer id;
private String imsig;
private String ki;
public C() {
super();
}
public C(String imsig, String ki) {
super();
this.imsig = imsig;
this.ki = ki;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(nullable = false, length = 20)
public String getImsig() {
return imsig;
}
public void setImsig(String imsig) {
this.imsig = imsig;
}
@Column(nullable = false, length = 20)
public String getKi() {
return ki;
}
public void setKi(String ki) {
this.ki = ki;
}
}
Abc类:
package com.jason.bean;
import java.io.Serializable;
/**
* 多表查询时用来构造集合的实体类
*
* @author jason
*
*/
public class Abc implements Serializable {
private static final long serialVersionUID = -7365473055198228075L;
/** 实体类主键 * */
private Integer id;
private String imsi;
private String imsig;
private String sipss;
private String mdn;
private String ki;
public Abc() {
}
public Abc(String imsi, String sipss, String mdn) {
this.imsi = imsi;
this.sipss = sipss;
this.mdn = mdn;
}
public Abc(String imsi, String imsig, String mdn, String ki) {
super();
this.imsi = imsi;
this.imsig = imsig;
this.mdn = mdn;
this.ki = ki;
}
public Abc(String imsi, String imsig, String sipss, String mdn, String ki) {
super();
this.imsi = imsi;
this.imsig = imsig;
this.sipss = sipss;
this.mdn = mdn;
this.ki = ki;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getImsi() {
return imsi;
}
public void setImsi(String imsi) {
this.imsi = imsi;
}
public String getImsig() {
return imsig;
}
public void setImsig(String imsig) {
this.imsig = imsig;
}
public String getSipss() {
return sipss;
}
public void setSipss(String sipss) {
this.sipss = sipss;
}
public String getMdn() {
return mdn;
}
public void setMdn(String mdn) {
this.mdn = mdn;
}
public String getKi() {
return ki;
}
public void setKi(String ki) {
this.ki = ki;
}
}
QueryTest测试类:
package junit.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.jason.bean.A;
import com.jason.bean.Abc;
import com.jason.bean.B;
import com.jason.bean.C;
/**
* 多表查询
*
* @author jason
*
*/
@SuppressWarnings("unchecked")
public class QueryTest {
private static EntityManagerFactory factory;
private static EntityManager em;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
factory = Persistence.createEntityManagerFactory("jason");
em = factory.createEntityManager();
em.getTransaction().begin();
}
@Test
public void add() throws Exception {
em.persist(new A("41650a", "abcefg1"));
em.persist(new A("41650b", "abcefg2"));
em.persist(new A("41650c", "abcefg3"));
em.persist(new C("imsig_a","12345a"));
em.persist(new C("imsig_b","12345b"));
em.persist(new C("imsig_c","12345c"));
em.persist(new C("imsig_e","12345d"));
em.persist(new B("41650a", "imsig_a", "059188893381"));
em.persist(new B("41650b", "imsig_b", "059188893382"));
em.persist(new B("41650e", "imsig_c", "059188893383"));
em.persist(new B("41650aa", "imsig_123", "059188893384"));
em.persist(new B("41650cc", "imsig_1", "059188893385"));
}
/**
* 多表查询对象A、B
*
* @throws Exception
*/
@Test
public void queryAB() throws Exception {
List<Abc> abcs = em.createQuery("select new com.jason.bean.Abc(a.imsi, a.sipss, b.mdn) " +
"from A a, B b where a.imsi=b.imsi").getResultList();
for(Abc abc : abcs){
System.out.println("imsi:"+abc.getImsi());
System.out.println("sipss:"+abc.getSipss());
System.out.println("mdn:"+abc.getMdn());
System.out.println("========");
}
}
/**
* 多表查询对象B、C
*
* @throws Exception
*/
@Test
public void queryBC() throws Exception {
List<Abc> abcs = em.createQuery("select new com.jason.bean.Abc(b.imsi, b.imsig, b.mdn, c.ki) " +
"from B b, C c where b.imsig=c.imsig").getResultList();
for(Abc abc : abcs){
System.out.println("imsi:"+abc.getImsi());
System.out.println("imsig:"+abc.getImsig());
System.out.println("mdn:"+abc.getMdn());
System.out.println("ki:"+abc.getKi());
System.out.println("=======");
}
}
/**
* 多表查询对象A、B、C
*
* @throws Exception
*/
@Test
public void queryABC() throws Exception {
List<Abc> abcs = em.createQuery("select new com.jason.bean.Abc(b.imsi, b.imsig, a.sipss, b.mdn, c.ki) " +
"from A a, B b, C c where a.imsi=b.imsi and b.imsig=c.imsig").getResultList();
for(Abc abc : abcs){
System.out.println("imsi:"+abc.getImsi());
System.out.println("imsig:"+abc.getImsig());
System.out.println("sipss:"+abc.getSipss());
System.out.println("mdn:"+abc.getMdn());
System.out.println("ki:"+abc.getKi());
System.out.println("=======");
}
}
@Test
public void test() throws Exception {
Persistence.createEntityManagerFactory("jason");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
em.getTransaction().commit();
em.close();
factory.close();
}
}
分享到:
相关推荐
jpa入门案例:单表查询,包括分页查询 使用springboot来整合实现
springboot jpa的使用案例- mysql、redis、resteful. jpa提供了统一接口,让访问飞一般的感觉。
springboot+jpa+angularjs详细案例
JPA最新案例,工具myeclipse 10 ,jdk1.7,mysql,包含hibernate核心包和注解包,还有JPA包
使用ssh搭建框架+jpa+注解的使用 和通用Dao的使用集成SSH框架
springboot 整合jpa小案例,非常适合新手学习,集成了swagger,可以直接运行,通过连接mysql数据库来实现功能
spring data jpa 案例,用于学习springdata jpa一些常用api
Spring Data JPA 整合案例
Spring boot + shiro + jpa小案例
NULL 博文链接:https://chentian114.iteye.com/blog/2287028
关于springboot+jpa+swagger (动态查询)简单demo案例
Spring mvc + jpa +mysql5.6 配置,项目可运行。其中有两个案例,包含增删改查,复合主键开发 查询列表中,下拉列表显示名称所采用方式数据量大的时候存在问题,建议使用多表关联的方式。适合菜鸟学习。
springmvc jpa
JPA(Hibernate) + Spring JPATemplate 运行在oracle数据库上 博文链接:https://clarancepeng.iteye.com/blog/199249
开发hibernate jpa 依赖的所有jar,mysql 驱动jar包等。
这是JPA标签配置手册,从ORACLE官方得到的资料,里面对JPA所有的标签都进行详细的说明。 Index of Annotations • A o @AssociationOverride o @AssociationOverrides o @AttributeOverride o @AttributeOverrides ...
针对MySQL数据库做的JPA的小例子 JPA1.0的包
这是一个jpa(hibernate)的学习代码,是我学习JPA的总结,包含三个案例,一对一、一对多、多对多 。 eclipse工具编码为utf-8
该源码包括SpringDataJPA用户信息增删改查操作案例,提供TestNG单元测试工具测试案例,同时还提供Jersey 统一异常处理机制实现Demo案例,以查询分页页码不能为负数为例测试异常处理机制的正确性。
jpa和hibernate的一个简单例子