• jpa多表查询


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


    }
  • 相关阅读:
    这个夏天,感动我的歌,感动我的你
    设计中最困难的部分在于决定要设计什么 设计原本择录
    Sql效能优化总结(续) sql语句优化篇
    sql效能优化总结
    使用AStyle进行代码格式化
    迭代模型 转
    软件项目开发系列开篇杂谈
    Sql效能优化总结(续) 架构调整篇
    throw和throw ex的区别
    面向过程&面向对象 UML&RUP
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1951375.html
Copyright © 2020-2023  润新知