Как настроить имена столбцов встроенного объекта?

#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;