【问题标题】:hibernate map view with one to many relations具有一对多关系的休眠地图视图
【发布时间】:2019-03-01 04:36:34
【问题描述】:

我正在使用 hibernate @Subselect 注释将 sql 视图映射到实体类。 基本上,它看起来有点像这样:

@Subselect(
    "SELECT table1.*, table2.id as tid FROM " 
   + "table1 INNER JOIN table2 on table2.field = table1.field"
)
@Entity
@Immutable
class Entity {
    // fields
}

当加入工作时,我可能会得到如下内容

========================================
| table1.id | table1.field | table2.id |
========================================
|         1 |            1 |         1 |
========================================
|         1 |            1 |         2 |
========================================

所以 table2 中的几条记录可以连接到 table1 中的一行。这很好,但是在 java Entity 中我想将它映射为一对多关系(一个实体到多个 table2 实体),这是我写的,它适用于其他类型的关系:

@Subselect(
    "SELECT table1.*, table2.id as tid FROM " 
   + "table1 INNER JOIN table2 on table2.field = table1.field"
)
@Entity
@Immutable
class Entity {
    @OneToMany
    @JoinColumn(name = "tid", updatable = false, insertable = false)
    private Set<Table2Entity> elements = new HashSet<>();
}

但是,实体中的集合总是空的,这是为什么呢? 上述方法适用于一对一和多对一关系。

【问题讨论】:

    标签: java hibernate persistence one-to-many sql-view


    【解决方案1】:

    反过来,不需要使用 sql 进行连接,即可为视图实体带来一对多的关系。我是这样解决的:

    Subselect(
        "SELECT * from table1" 
    )
    @Entity
    @Immutable
    class Entity {
        @OneToMany
        @JoinColumn(name = "field", updatable = false, insertable = false)
        private Set<Table2Entity> elements = new HashSet<>();
    }
    

    我只需要输入列名,需要连接哪些表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多