jpa多表联查和无表映射JPQL处理

特别要注意,em.createQuery("select new com.atguigu.jpa.noTable.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();

这里的 com.atguigu.jpa.noTable.Abc,一定要写全路径,如果只写Abc就会报错,无法处理

jpa多表查询可以使用构造器的方式进行多表查询,以下为多表查询的案例。

本案例中有A、B、C三个对象实体类,对象A、B通过属性imsi关联,对象B、C通过imsig关联;

还有一个Abc类,它是一个用来多表查询时构造集合的普通类。

以下为案例代码

A类

复制代码
  
  
package com.ljq.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 对象A、B通过属性imsi关联 * * @author jiqinlin * */ @SuppressWarnings( " serial " ) @Entity public class A implements Serializable { @Id @GeneratedValue private Integer id; @Column(nullable = false , length = 20 ) private String imsi; @Column(nullable = false , length = 20 ) private String sipss; public A() { super (); } public A(String imsi, String sipss) { super (); this .imsi = imsi; this .sipss = sipss; } 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 getSipss() { return sipss; } public void setSipss(String sipss) { this .sipss = sipss; } }
复制代码

B类

复制代码
  
  
package com.ljq.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @SuppressWarnings( " serial " ) @Entity public class B implements Serializable { @Id @GeneratedValue private Integer id; @Column(nullable = false , length = 20 ) private String imsi; @Column(nullable = false , length = 20 ) private String imsig; @Column(nullable = false , length = 20 ) private String mdn; public B() { super (); } public B(String imsi, String imsig, String mdn) { super (); this .imsi = imsi; this .imsig = imsig; this .mdn = mdn; } 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 getMdn() { return mdn; } public void setMdn(String mdn) { this .mdn = mdn; } }
复制代码

C类型

复制代码
  
  
package com.ljq.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 对象B、C通过属性imsig关联 * * @author jiqinlin * */ @SuppressWarnings( " serial " ) @Entity public class C implements Serializable { @Id @GeneratedValue private Integer id; @Column(nullable = false , length = 20 ) private String imsig; @Column(nullable = false , length = 20 ) private String ki; public C() { super (); } public C(String imsig, String ki) { super (); this .imsig = imsig; this .ki = ki; } public Integer getId() { return id; } public void setId(Integer id) { this .id = id; } public String getImsig() { return imsig; } public void setImsig(String imsig) { this .imsig = imsig; } public String getKi() { return ki; } public void setKi(String ki) { this .ki = ki; } }
复制代码

Abc类型

复制代码
  
  
package com.ljq.entity; import java.io.Serializable; /** * 多表查询时用来构造集合的实体类 * * @author jiqinlin * */ @SuppressWarnings( " serial " ) public class Abc implements Serializable { /** 实体类主键 * */ 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; } }
复制代码

MultiListQueryTest测试类

复制代码
  
  
package junit.test; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.Test; import com.ljq.entity.A; import com.ljq.entity.Abc; import com.ljq.entity.B; import com.ljq.entity.C; /** * 多表查询 * * @author jiqinlin * */ public class MultiListQueryTest { @Test public void add() throws Exception { EntityManagerFactory factory = Persistence.createEntityManagerFactory( " ljq " ); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); 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 " )); em.getTransaction().commit(); em.close(); factory.close(); } /** * 多表查询对象A、B * * @throws Exception */ @Test public void queryAB() throws Exception { EntityManagerFactory factory = Persistence.createEntityManagerFactory( " ljq " ); EntityManager em = factory.createEntityManager(); List < Abc > abcs = em.createQuery( " select new com.ljq.entity.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( " ======== " ); } em.close(); factory.close(); } /** * 多表查询对象B、C * * @throws Exception */ @Test public void queryBC() throws Exception { EntityManagerFactory factory = Persistence.createEntityManagerFactory( " ljq " ); EntityManager em = factory.createEntityManager(); List < Abc > abcs = em.createQuery( " select new com.ljq.entity.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( " ======= " ); } em.close(); factory.close(); } /** * 多表查询对象A、B、C * * @throws Exception */ @Test public void queryABC() throws Exception { EntityManagerFactory factory = Persistence.createEntityManagerFactory( " ljq " ); EntityManager em = factory.createEntityManager(); List < Abc > abcs = em.createQuery( " select new com.ljq.entity.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( " ======= " ); } em.close(); factory.close(); } @Test public void test() throws Exception { Persistence.createEntityManagerFactory( " ljq " ); } }
  
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值