#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, чтобы избежать декартова произведения, не затрагивая сущности.