java - JPA:多个表对应一个实体

标签 java jpa

我有一个表1

ID | RECORD | DATE | NAME ...

和一个表2

ID | RECORD | DATE | CITY ...

我有一个 POJO Table1.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());
...

我需要连接 table1 和 table2(主键 = ID、RECORD、DATE)并将 CITYtable2 添加到 Table1 类。 我怎样才能做到这一点?

最佳答案

您在这里使用 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

关于java - JPA:多个表对应一个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967849/

相关文章:

java - 无法使用java打开exe应用程序

java - 基于点的曲线变换。 Android 中的贝塞尔曲线变换

java - 如何在 Android 中创建 JSON?

java - @ManyToMany 关系不保存

hibernate - 如何使用分组进行条件查询

java - 在 java 中通过服务器和客户端之间的套接字传输 XML

java - 应用程序中多个生命周期极短的 session 属性

java - Hibernate:没有找到查询类的持久类:从实体中选择 p.演示文稿 p

java - JQuery DataTables服务端分页、排序、搜索用Spring MVC + JPA

java - 使用 JPA 处理集合更新