У меня есть несколько таблиц, скажем,
@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 записи
- color | синий | 10
- модель | Honda | 10
- марка | 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 соединения, поэтому писать нативный запрос кажется болезненным.