【问题标题】:How to map native sql results to oneToMany field with SqlResultSetMapping in JPA如何使用 JPA 中的 SqlResultSetMapping 将本机 sql 结果映射到 oneToMany 字段
【发布时间】:2016-09-20 16:33:25
【问题描述】:

例如,假设我有以下数据库表

Building
-----------
id
name

Room
-----------
id
roomNo
buildingId

Building Java 类看起来像

@Entity
public class Building {       
   private int id;
   @OneToMany private List<Room> rooms;
...

我有以下 SQL 来获取建筑物

SELECT   b.id,
         b.name,
         r.id AS rid,
         r.roomNo 
FROM     Building b
  LEFT JOIN Room r ON
         b.id = r.buildingId

结果是

id, name, rid, roomNo
---------------------
1, 'b1', 10, 'r100'
1, 'b1', 11, 'r101'
2, 'b2', 12, 'r10'

请注意,由于一对多的关系,存在重复的建筑物。

我知道我可以简单地使用 JPQL 来获取 Building 实体,但我想使用本机 SQL 来做到这一点。那么如何使用 JPA 的 @SqlResultSetMapping 将上面的结果映射回 Building 类?

【问题讨论】:

  • 你找到解决这个程序的方法了吗?恐怕我一直在采用低于标准的解决方案来满足最后期限。
  • 我认为这在 JPA 中是不可能的。

标签: java sql jpa


【解决方案1】:

如果要保留 Join 语句,可以使用此代码:

SELECT DISTINCT
         b.id,
         b.name,
         0 AS rid,
         '' AS roomNo 

FROM     Building b
  LEFT JOIN Room r ON
         b.id = r.buildingId

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2021-02-21
    • 2018-03-30
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多