Создайте номер автоинкремента и вставьте данные в Oracle DB с помощью EntityManager NativeQuery - PullRequest
0 голосов
/ 07 мая 2020

Я разрабатываю приложение ETL с использованием Spring. У меня есть данные, которые нужно вставить в тип String, и я хочу загрузить данные с помощью entityManager.createNativeQuery (query) .executeUpdate () У меня нет никакой сущности, поскольку приложение ETL можно использовать для любого источника данных.

Чтобы продемонстрировать проблему:

Исходные данные могут быть любыми действительными JSON например {name: "John", age: 31, city: "New York"}

Само приложение генерирует запрос INSERT отсюда, например: INSERT INTO TABLE_NAME (Name, Age, City) values ('John',31,'New York')

Я использую @PersistenceContext EntityManager em для подключения к Oracle 12 c. Таким образом, запуск em.createNativeQuery (query) .executeUpdate выполняет эту работу за меня.

Однако, когда я пытаюсь использовать собственный индекс в целевой таблице, я не могу найти правильный метод выполнения так.

Я пробовал использовать класс KeyHolder, но он работает с JdbcTemplate, а не с EntityManager

KeyHolder keyHolder = new GeneratedKeyHolder();

Я не могу использовать

em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(entity);

, так как я не могу создайте здесь объект.

Каким будет правильный метод создания здесь собственного уникального ключа?

1 Ответ

0 голосов
/ 08 мая 2020

Я рекомендую переключиться на JdbcTemplate, так как не похоже, что вы все равно используете какие-либо функции JPA.

Если вы настаиваете на использовании EntityManager, я думаю, у вас будет чтобы сначала выбрать порядковый номер с помощью SELECT my_seq.nextval FROM DUAL, а затем использовать его для оператора вставки.

...