JPA извлекает данные из таблиц на основе карты таблицы значений коллекции - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть несколько таблиц, скажем,

@Entity("car")
public class CarEntity {
  private Long id;
  private double amount;
  .
  bunch of fields
  .
  @ElementCollection
  @MapKeyColumn(name="name")
  @Column(name="value")
  @CollectionTable(name="car_dimensions", 
     joinColumns=@JoinColumn(name="car_id"))
  private Map<String, String> dimensions = new LinkedHashMap<>();

}

Этот код на самом деле хранит объект, Car [id = 10, {"color": "blue", "model": "honda", " make ": 2007}] в двух таблицах, в таблице

car_dimensions будет 3 записи

  1. color | синий | 10
  2. модель | Honda | 10
  3. марка | 2007 | 10

Теперь есть одно условие, в котором я хочу получить значения, например, основанные на значениях ключей в подобии, основанные на измерениях,

Возможно, что-то вроде,

select sum(car.amount) from car where
(select value from car_dimensions cd where cd.name = 'color' and cd.car_id = car.id) = 'blue' and 
(select value from car_dimensions cd where cd.name = 'model' and cd.car_id = car.id) = 'honda';

В то же время я не сопоставляюсь по всем измерениям, как я проигнорировал здесь «make», но в реальном сценарии будет еще больше измерений, и мне может потребоваться сопоставить только по нескольким измерениям. Я понимаю, что эти модель и цвет должны были быть столбцами только в автомобильной таблице, но этот проект существует уже довольно давно, и я не хочу полностью менять его, как только что присоединился, но мне нужна помощь в написании чего-то подобного в JPA / hibernate с кодом, который может быть только читаемым или обновляемым. Этот запрос кажется простым, но в моем реальном сценарии есть еще 5, где условия и, возможно, еще 3 соединения, поэтому писать нативный запрос кажется болезненным.

...