我正在使用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);
因为我不能在这里创建一个实体。
在这里创建一个自己的唯一键的正确方法是什么?
我建议切换到 JdbcTemplate
因为看起来你并没有使用JPA的任何功能。
如果你坚持使用 EntityManager
,我想你必须先选择序列号,用 SELECT my_seq.nextval FROM DUAL
然后用它来插入语句。