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


}
posted on 2011-02-11 15:26  Ruthless  阅读(50882)  评论(1编辑  收藏  举报