JPA:几个 table 到一个实体
JPA: Several table to one Entity
我有一张桌子 1
ID | RECORD | DATE | NAME ...
和一张桌子2
ID | RECORD | DATE | CITY ...
我有一个 POJO Table1.java class:
@Entity
@Table(name="table1")
public class Table1{
private String id = null;
private String record = null;
private Date date = null;
private String name = null;
...
}
然后我执行这样的查询:
...
String q = "select * from table1"
Query query = em.createNativeQuery(q, Table1.class);
return new ArrayList<Table1>(query.getResultList());
...
我需要连接表 1 和表 2(主键 = ID、RECORD、DATE)并从 table2 添加字段 CITY 添加到 Table1class。
我该怎么做?
您正在此处使用 JPA,但正在寻找 SQL 查询。虽然这在 SQL 中显然是可能的,但如果我们想留在 JPA 的域中,那么我们可以使用 @SecondaryTable
功能来做到这一点,该功能允许您将 1 个实体映射到 2 个(或更多)表:
@Entity
@Table(name="table1")
@SecondaryTable(name="table2")
public class Table1{
//by default these are mapped to T1
@Id
private String id;
private String record;
private Date date;
private String name ;
//explicitly specify the table to map to T2
@Column(table="table2")
private String city:
}
由于您已在实体级别进行映射,因此您实际上并不需要查询,即。 city 只是成为您实体的 属性,SQL 加入在幕后透明完成。
EntityManager em = //;
Table1 t1 = em.find(T1.class, 1);
System.out.println(t1.getCity());
有关详细信息,请参阅以下内容:
http://en.wikibooks.org/wiki/Java_Persistence/Tables#Multiple_tables
我有一张桌子 1
ID | RECORD | DATE | NAME ...
和一张桌子2
ID | RECORD | DATE | CITY ...
我有一个 POJO Table1.java class:
@Entity
@Table(name="table1")
public class Table1{
private String id = null;
private String record = null;
private Date date = null;
private String name = null;
...
}
然后我执行这样的查询:
...
String q = "select * from table1"
Query query = em.createNativeQuery(q, Table1.class);
return new ArrayList<Table1>(query.getResultList());
...
我需要连接表 1 和表 2(主键 = ID、RECORD、DATE)并从 table2 添加字段 CITY 添加到 Table1class。 我该怎么做?
您正在此处使用 JPA,但正在寻找 SQL 查询。虽然这在 SQL 中显然是可能的,但如果我们想留在 JPA 的域中,那么我们可以使用 @SecondaryTable
功能来做到这一点,该功能允许您将 1 个实体映射到 2 个(或更多)表:
@Entity
@Table(name="table1")
@SecondaryTable(name="table2")
public class Table1{
//by default these are mapped to T1
@Id
private String id;
private String record;
private Date date;
private String name ;
//explicitly specify the table to map to T2
@Column(table="table2")
private String city:
}
由于您已在实体级别进行映射,因此您实际上并不需要查询,即。 city 只是成为您实体的 属性,SQL 加入在幕后透明完成。
EntityManager em = //;
Table1 t1 = em.find(T1.class, 1);
System.out.println(t1.getCity());
有关详细信息,请参阅以下内容:
http://en.wikibooks.org/wiki/Java_Persistence/Tables#Multiple_tables