спящий вид карты с отношениями один ко многим - PullRequest
0 голосов
/ 25 сентября 2018

Я сопоставляю представление sql классу сущности с аннотацией hibernate @Subselect.По сути, это выглядит примерно так:

@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 |
========================================

Таким образом, несколько записей в таблице2 могут объединиться в одну строку в таблице1.Это нормально, однако в 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<>();
}

Однаконабор в сущности всегда пуст, почему это так?Вышеупомянутый подход работает для отношений один к одному и много к одному.

1 Ответ

0 голосов
/ 26 сентября 2018

Повороты, не требуется делать соединение с SQL, чтобы привести отношения один ко многим для объекта представления.Я решил это так:

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

Мне нужно было только указать имя столбца, к которому нужно объединить таблицы.

...