我是springboot新手,需要在oracle表中插入json数据,避免重复插入

Posted

技术标签:

【中文标题】我是springboot新手,需要在oracle表中插入json数据,避免重复插入【英文标题】:I am new to springboot and need to insert json data in oracle table and avoid duplicate inserts 【发布时间】:2021-04-27 16:10:51 【问题描述】:

我可以使用 springboot 的中间表在 oracle 表中插入 json 数据

我有一张桌子 abc-

ID  first_name  last_name  cust_ID  Active_Ind last_upd_dt
1   abc         pqr          101     Y          01-Apr-2021
2   aaa         bbb          102     Y          05-Feb-2021

我需要确保—— 如果新的 json 数据具有上述现有值,则不要更新表 abc,保持原样,如果有新记录,则插入。如果新的 json 数据中不存在 oracle 表记录,则将 ACTIVE_IND 更改为 'N'

我尝试使用以下查询插入中间表“test”中不存在的值:

insert into abc
(ID, 
first_name, 
last_name, 
cust_ID, 
active_ind, 
last_upd_dt)
select 
abc_seq.nextval,
first_name, 
last_name, 
cust_ID, 
active_ind, 
last_upd_dt 
from test t
where not exists(
select null from abc a
where a.fist_name = t.first_name
and a.cust_ID = t.cust_ID);

这在 Oracle 开发人员中运行良好,但是当我在 springboot 中尝试以下查询时,它以某种方式插入重复项,不知道为什么会发生这种情况,我已经为索引使用了准备好的语句。

insert into abc
(ID, 
first_name, 
last_name, 
cust_ID, 
active_ind, 
last_upd_dt)
select 
abc_seq.nextval,
?, 
?, 
?, 
?, 
?
from test t
where not exists(
select null from abc a
where a.fist_name = t.first_name
and a.cust_ID = t.cust_ID);```

I have tried merge queries as well, but none of them worked for me.

【问题讨论】:

【参考方案1】:

如果您使用的是 Spring Boot,我假设您已经映射了实体并且您正在使用 JPA。

一旦你映射了实体

@Entity
@Table(name = "abc")
public class ABC 

   @Id
   private Long id;
   
   @Column(name = "name")
   private String name;
   
   ...

然后我还假设您创建了一个存储库(如果您使用的是 Repo 模式)

public interface ABCRepository extends JpaRepository<ABC, Long> 

   //leave it blank If you don't need any particular method for querying

在这种情况下,您可以使用 findOne JPA 方法传递您希望结果匹配的对象的示例。如果只是 ID,则只需使用 findByID。无论如何,您现在可以自己创建一个 saveIfExists(示例)

public ABC saveIfNotExists(Example<ABC> example) 
   return abcRepo.findOne(example).orElse(()-> 
     return abcRepo.save(example);
   ;

【讨论】:

感谢您的回复,我正在为此使用 JdbcItemReader 和 Writer。我使用了ignore_row_on_dupkey_index,并且很好地忽略了重复项。最初它给出了违反唯一约束的错误,但这解决了。感谢您的宝贵时间 很高兴你找到了自己的出路!

以上是关于我是springboot新手,需要在oracle表中插入json数据,避免重复插入的主要内容,如果未能解决你的问题,请参考以下文章

从 Spring JAVA 中的 oracle PLSQL 函数获取结果集时出错

两个如何在Oracle SQL中连接两个表

Oracle 查询 -ListAgg

在oracle中插入或更新新记录时更新同一表的记录

基本的 oracle 更新语句

在 Oracle 中填充事实表