使用EntityManager NativeQuery生成一个自动增加的数字并将数据插入到Oracle DB中。

问题描述 投票:0回答:1

我正在使用Spring开发一个ETL应用程序。我的数据是以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 12c。因此,运行em.createNativeQuery(query).executeUpdate对我来说是可行的。

然而,当我尝试在目标表中使用自己的索引时,我无法找出正确的方法。

我试着使用KeyHolder类,但它可以用JdbcTemplate工作,而不是EntityManager。

KeyHolder keyHolder = new GeneratedKeyHolder();

我无法使用

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

因为我不能在这里创建一个实体。

在这里创建一个自己的唯一键的正确方法是什么?

java spring jpa spring-data-jpa spring-jdbc
1个回答
0
投票

我建议切换到 JdbcTemplate 因为看起来你并没有使用JPA的任何功能。

如果你坚持使用 EntityManager,我想你必须先选择序列号,用 SELECT my_seq.nextval FROM DUAL 然后用它来插入语句。

© www.soinside.com 2019 - 2024. All rights reserved.