Java JPA. Выберите столбец из другой таблицы, используя where по другому столбцу

#java #hibernate #jpa #entity #where-clause

#java #переход в спящий режим #jpa #сущность #where-предложение

Вопрос:

У меня есть две таблицы:

 create table table_binding (id bigint not null, description varchar(255),primary key (id));
  

и

 create table table2 (id bigint not null, value clob, type varchar(255));
  

Например, таблицы были заполнены следующими значениями:

table_binding:

 |---------------------|------------------|
|          ID         |    Description   |
|---------------------|------------------|
|          1          |     Some Desc    |
|---------------------|------------------|
|          2          |    Other Desc    |
|---------------------|------------------|
  

table2:

 |---------------------|------------------|------------------|
|          ID         |       value      |       type       |
|---------------------|------------------|------------------|
|          1          |      VALUE_A     |       TYPE1      | 
|---------------------|------------------|------------------|
|          1          |      VALUE_B     |       TYPE2      | 
|---------------------|------------------|------------------|
|          2          |      VALUE_C     |       TYPE1      | 
|---------------------|------------------|------------------|
|          2          |      VALUE_D     |       TYPE2      | 
|---------------------|------------------|------------------|
  

У меня есть один объект, такой как

 @Entity(name = "table_binding")
@Data
public class myBinding(){

    @Id
    @GeneratedValue(strategy= GenerationType.SEQUENCE)
    Long id; 
    private String description;
    @Clob
    private String value1;
    @Clob
    private String value2;

}
  

Как я могу изменить код класса сущности, чтобы значения 1 и значение2 совпадали с возвращаемыми значениями следующего запроса sql:
значение 1:

 select value.t2 from table2 t2,table_binding t1 where t2.type="TYPE1" and t2.id=t1.id and t1.id=?
  

значение2:

 select value.t2 from table2 t2,table_binding t1 where t2.type="TYPE2" and t2.id=t1.id and t1.id=?
  

Я имею в виду, что объект myBinding для id = 1 будет:
id =1 ; descripton =»Некоторый Desc»; valu1=»VALUE_A»;value2=»VALUE_B»

Я знаю о @SecondaryTable и @Column аннотации, но они не позволяют реализовать

 where t2.type="TYPE1"
  

Ответ №1:

Объекты должны быть точным представлением базы данных.

В соответствии с выбранной вами конфигурацией приложение не запускается, поскольку вы указываете в сущности, что таблица TABLE_BINDING имеет столбцы VALUE1 и VALUE2, когда этого не происходит.

Лучшее, что вы можете сделать, это смоделировать две сущности, по одной для каждой таблицы с соответствующими столбцами, и реализовать запрос, который возвращает нужные вам данные, либо с помощью fk между ними, либо с помощью подзапроса, либо добавив две таблицы в from . и необходимые условия для предложения where, чтобы избежать декартова произведения, не затрагивая сущности.