Соотношение один ко многим в агрегированном дочернем элементе неправильно отображается при извлечении его из базы данных с помощью spring-data-jdbc - PullRequest
2 голосов
/ 27 марта 2019

У меня есть агрегат, который имеет отношение один к одному, а на втором уровне дочерняя сущность имеет отношение один ко многим (Список).В настоящее время, когда объект сохраняется, он делает то, что ожидается, и сохраняет его в порядке.Но когда я пытаюсь получить сущность из базы данных, генерируемый SQL-код неверен, что приводит к ошибке.Я не могу сказать, что мне здесь не хватает, любая помощь будет принята с благодарностью.Я использую Lombok, spring-data-jdbc и spring-boot.Может, Ломбоку есть чем заняться, но я не могу сказать.Вот код, иллюстрирующий то, о чем я говорю: интерфейс

public interface ChargeRepository extends CrudRepository<Charge, Long> {

}

сущности

@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Charge {

    @Id
    private Long id;

    private Double someData;

    private Summary summary;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Summary {

    @Id
    private Long id;

    private Double otherData;

    private List<Multiplier> details = new ArrayList<>();
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Multiplier {

    @Id
    private Long id;

    private Double detailData;
}

вот DDL

CREATE TABLE CHARGE(
  ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  SOME_DATA DOUBLE(2) NOT NULL,
  PRIMARY KEY(ID)
);

CREATE TABLE SUMMARY(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
OTHER_DATA DOUBLE(2) NOT NULL,
CHARGE BIGINT UNSIGNED NOT NULL,
PRIMARY KEY(ID)
);

CREATE TABLE Multiplier(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
DETAIL_DATA DOUBLE(2) NOT NULL,
SUMMARY BIGINT UNSIGNED NOT NULL,
SUMMARY_KEY INTEGER NOT NULL,
PRIMARY KEY(ID)
);

Проблемав том, что когда я сохраняю новую сущность, она работает нормально, но когда я пытаюсь извлечь ее из базы данных, сгенерированный sql создает соединение между таблицами со столбцом «детали», который существует в сущности, но, очевидно, не является частью таблицы,Это ошибка, которую я получаю

PreparedStatementCallback;неверная грамматика SQL [ВЫБРАТЬ charge.id AS id, charge.some_data AS some_data, summary.id AS summary_id, summary.other_data AS summary_other_data, summary.details AS summary_details ОТ начисления СЛЕДУЕТ ВНЕШНЕЕ СОЕДИНЕНИЕ Сводка AS сводка НА сводку.charge = charge.id ГДЕ charge.id =?];вложенное исключение - org.h2.jdbc.JdbcSQLException: столбец \ "SUMMARY.DETAILS \" не найден \ nКолонна \ "SUMMARY.DETAILS \" не найдена;Оператор SQL: \ nSELECT charge.id Идентификатор AS, charge.some_data AS some_data, summary.id AS summary_id, summary.other_data AS summary_other_data, summary.details AS summary_details ОТ заряда СЛЕДУЮЩИЙ ВНЕШНИЙ ОБЪЕДИНИТЬ сводный отчет AS Summary ON summary.charge = charge.idГДЕ обвинения.ид =?

Чего мне здесь не хватает?РЕДАКТИРОВАТЬ: Забыл добавить, если список находится в корневом агрегате, он работает нормально.

...