#java #spring-data-jdbc
#java #spring-data-jdbc
Вопрос:
Я пытаюсь использовать JDBC Spring Data и не могу понять, есть ли возможность настроить имена столбцов встроенного объекта (в JPA мы используем @AttributeOverrides
для этого).
В моей модели я создал класс Amount
, который я хотел бы повторно использовать в разных типах объектов.
public class Amount {
private BigDecimal value;
private String currency;
//getters, settes, contructors
}
Я хотел бы сохранить его как 2 встроенных значения в двух таблицах: houses
и cars
.
В таблице houses
я хочу, чтобы столбцы вызывались house_price_value
и house_price_currency
. В таблице cars
они должны называться car_eval_value
и car_eval_currency
.
public class House {
@Id
Long id;
int numberOfRooms;
@Embedded
Amount amount;
//other attributes, getters, setters, constructors
}
public class Car {
@Id
Long id;
String model;
@Embedded
Amount amount;
//other attributes, getters, setters, constructors
}
Проблема в том, что аннотация @Column
применима только к атрибуту и должна быть установлена на уровне Amount
-class . что делает этот класс не подлежащим повторному использованию.
В JPA я бы использовал это, но в JDBC эта аннотация не найдена:
@AttributeOverrides(value = {
@AttributeOverride(name = "value", column = @Column(name = "house_price_value")),
@AttributeOverride(name = "currency", column = @Column(name = "house_price_currency"))
})
Разве я не вижу другого решения?
Комментарии:
1. Разве это не подходит для вас: docs.spring.io/spring-data/jdbc/docs/1.0.6.RELEASE/reference /…
2. @mate00 не полностью. Я должен поместить эти столбцы внутри класса Amount, и поэтому я не знаю, как настроить его для разных таблиц и сделать его повторно используемым
3. Я думаю, что я не понимаю. Вы хотите использовать Amount более чем в одной таблице (скажем, A, B и C), но только в таблице A вы хотите другое имя для столбца, чем в B и C?
4. @mate00 да, почти. во всех таблицах я хочу иметь разные имена столбцов для «значения» и «валюты»
Ответ №1:
Я думаю, что это должно работать с value
атрибутом @Embedded
. Это значение должно содержать префикс.
@Embedded(value = "house_price_")
Amount approvalValue;