Hibernate 在同一事务中休眠插入忽略

Hibernate 在同一事务中休眠插入忽略,hibernate,jpa,duplicates,ignore,Hibernate,Jpa,Duplicates,Ignore,我在韩国写这篇文章 从来没有问过 所以。。如果你认为我的语法不好,我会很感激。 我正在研究JPA2+Hibernate3。使用MYSQL作为数据库 TestB类如下所示 @SQLInsert(sql = "INSERT IGNORE INTO testB (....) VALUES (?,?,?,?,?,?) ;") Class TestB{ @GeneratedValue(strategy=GenerationType.IDENTITY) @ID private long id;

我在韩国写这篇文章

从来没有问过

所以。。如果你认为我的语法不好,我会很感激。 我正在研究JPA2+Hibernate3。使用MYSQL作为数据库

TestB类如下所示

@SQLInsert(sql = "INSERT IGNORE INTO testB (....) VALUES (?,?,?,?,?,?) ;")
Class TestB{
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @ID
  private long id;

  @Column(unique)
  String ccc; 
}
用于事务启动

@Transactional

List<TestB> list = ...
repoitory.save(list);
两者都不起作用

每种类型的错误都是

1. The database returned no natively generated identity value.
2. NonUniqueObject Exception.
这两种情况都发生在重复条目上,而不是第一个条目

我假设发生错误:1是因为

插入后,hibernate应该为代理对象分配ID,但它不能

我假设错误:2是由, 同一会话中不能存在具有相同id的两个对象

那我怎么解决这个问题呢?? 这可以理解吗


提前谢谢~

在第一种情况下,如果没有违反约束或sql错误,hibernate会尝试将数据插入表中。如果在使用INSERT IGNORE DB后出现任何异常(例如,唯一密钥冲突…),则不会在DB中插入任何内容,因此没有本机生成的ID;Hibernate引发系统异常,错误为
。数据库未返回任何本机生成的标识值

解决方案之一:处理此错误的一种方法是捕获HibernateSystemException,它在insert失败时抛出,被MySQL数据库忽略


因为这是一个hibernate系统异常,所以hibernate内部似乎会将事务标记为回滚,即使其中一个ignore失败。我也在努力找到解决办法

谢谢你的回答,我正试着按照你的建议去做,但我不知道如何捕捉hibernate系统异常。。无论如何谢谢~在@transactional上下文中捕获hibernate系统异常的问题是hibernate将事务标记为回滚。因此,即使您通过使用try-catch块包围DB操作来处理HibernateSystemException,也可以使用JDBC模板和JDBC simple insert,或者只构建JDBC insert语句并执行。
1. The database returned no natively generated identity value.
2. NonUniqueObject Exception.