Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:多个表到一个实体_Java_Jpa - Fatal编程技术网

Java JPA:多个表到一个实体

Java JPA:多个表到一个实体,java,jpa,Java,Jpa,我有一张桌子 ID | RECORD | DATE | NAME ... 和一张表2 ID | RECORD | DATE | CITY ... 我有一个POJOTable1.java类: @Entity @Table(name="table1") public class Table1{ private String id = null; private String record = null; private Date date = null; private String name

我有一张桌子

ID | RECORD | DATE | NAME ...
和一张表2

ID | RECORD | DATE | CITY ...
我有一个POJOTable1.java类:

@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());
...
。。。
String q=“从表1中选择*
Query Query=em.createNativeQuery(q,Table1.class);
返回新的ArrayList(query.getResultList());
...
我需要连接表1和表2(主键=ID、记录、日期),并从table2添加到table1类中添加字段CITY
我该怎么做呢?

您在这里使用的是JPA,但正在寻找SQL查询。虽然这在SQL中显然是可能的,但如果我们想留在JPA域中,那么我们可以使用
@SecondaryTable
功能实现这一点,该功能允许您将一个实体映射到两个(或更多)表:

由于您已经在实体级别进行了映射,因此实际上不需要查询,即。城市只是成为实体的一个属性,SQL连接在幕后透明地完成

EntityManager em = //;
Table1 t1 = em.find(T1.class, 1);
System.out.println(t1.getCity());
有关更多信息,请参阅以下内容:


两个表是否相关?您想如何加入它们?@singhakash是的,相关。Join:(table1.id=table2.id和table1.record=table2.record和table1.date=table2.date)查询应该是什么?您实际上不需要查询。您已经在实体级别对其进行了映射,因此每次加载实例时,都会为您填充字段,即。JPA提供商将在幕后为您加入。这是一个完美的答案,附带说明,如果@Dioi仍然想使用
createNativeQuery
,那么您需要使用
SqlResultSetMappings
,更多信息,只需谷歌搜索即可。@AlanHay我在另一个地方使用Entity,无法在Entity中添加其他列,我可以用Transient做这个吗?@tbc我在另一个地方使用Entity,不能在Entity中添加额外的列,我可以用Transient做这个吗?
EntityManager em = //;
Table1 t1 = em.find(T1.class, 1);
System.out.println(t1.getCity());