Spring JPA неправильно разрешает имя таблицы при сохранении объекта

Я использую модель программирования облачных приложений для Java, разработанную SAP, чтобы предоставлять услуги OData своим коллегам. Это сочетается с Весной. Сервис определяется в файле cds следующим образом:

      service POAccrualDataController {
entity POAccrualData {
        key OPSYS : String(3);
        EBELN : Integer;
        controller : String(25);
    }
}

В качестве теста я сделал простой контроллер:

      @Controller
@ServiceName("POAccrualDataController")
public class POAccrualDataController2 implements EventHandler {
    @Autowired
    private POAccrualDataService poAccrualDataService;

     @On(event = CdsService.EVENT_CREATE, entity = "POAccrualDataController.POAccrualData")
    public void onCreate(POAccrualData data) {
        POAccrualDataDTO dto = new POAccrualDataDTO();
        dto.setOPSYS(data.getOpsys());
        dto.setEBELN(data.getEbeln());
        dto.setController(data.getController());

        poAccrualDataService.insertPOAccrualData(dto);
}

    @On(event = CdsService.EVENT_READ, entity = "POAccrualDataController.POAccrualData")
    public List<POAccrualData> onRead() {
        List<POAccrualDataDTO> dtoList = poAccrualDataService.getAllPOAccrualData();
        List<POAccrualData> result = new ArrayList<>();
        for(POAccrualDataDTO dto : dtoList) {
            POAccrualData data = POAccrualData.create();
            data.setOpsys(dto.getOPSYS());
            data.setEbeln(dto.getEBELN());
            data.setController(dto.getController());

            result.add(data);
        }

        return result;
    }
}

Определенный объект передачи данных, отображаемый базой данных, выглядит следующим образом:

      @Entity
@Table(schema = "databroker")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class POAccrualDataDTO {
    @Id
    @Column
    private String OPSYS;
    @Column
    private Integer EBELN;
    @Column
    private String controller;
}

Контроллер использует службу, показанную ниже:

      @Service
public class POAccrualDataService {
    @Autowired
    private POAccrualDataRepository poAccrualDataRepository;

    public void insertPOAccrualData(POAccrualDataDTO data) {
        poAccrualDataRepository.save(data);
   }

    public List<POAccrualDataDTO> getAllPOAccrualData() {
        return poAccrualDataRepository.findAll();
    }
}

который имеет доступ к

      @Repository
public interface POAccrualDataRepository extends JpaRepository<POAccrualDataDTO, Long> {}

База данных настраивается liquibase. Проблема в том, что когда сервер запускается и я пытаюсь получить доступ к http://localhost:8080/odata/v4/POAccrualDataController/POAccrualData, запрос GET выполняется успешно, и в журналах я вижу следующую запись из спящего режима:

      org.hibernate.SQL                        : select poaccruald0_.OPSYS as opsys1_0_, 
poaccruald0_.EBELN as ebeln2_0_, poaccruald0_.controller as controll3_0_ from 
databroker.POAccrualDataDTO poaccruald0_

но когда я делаю то же самое с POST с использованием Postman, запускаю запрос со следующим телом:

      {
"OPSYS": "XXX",
"EBELN": 10,
"controller": "controller"
}

производит этот вывод:

      org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "POACCRUALDATACONTROLLER_POACCRUALDATA" not 
found; SQL statement: INSERT INTO POAccrualDataController_POAccrualData (EBELN, OPSYS, 
controller) VALUES (?, ?, ?)

При выполнении сохранения имя таблицы по какой-то причине меняется, и поэтому я не могу сохранять новые объекты в базе данных. Я проверил в консоли H2, все ли работает нормально, и выполнение вставки SQL таким образом работает. Я также предоставил пользовательскую стратегию именования, чтобы проверить, определены ли некоторые идентификаторы неправильно, и, похоже, это не проблема. Я считаю, что библиотека CAP, предоставляемая SAP, определяет собственные компоненты Spring, которые перезаписывают некоторое поведение по умолчанию, поэтому я предоставил свою собственную конфигурацию JPA для восстановления некоторых свойств. У кого-нибудь есть идея, что может быть источником проблем? Ссылка на репозиторий с полным проектом, где вы можете найти pom.xml, файл liquibase и мою пользовательскую конфигурацию: репозиторий.

0 ответов

Другие вопросы по тегам