首页 > 解决方案 > Hibernate 不返回手动插入的行

问题描述

我的 jpa 存储库存在问题,它没有返回我通过良好的旧 SQL 手动插入数据库 (Oracle) 的行

Insert into SYSTEM.USER (ID,CREDENTIALS,ISADMIN) values (USERSEQ.nextval,'foo',1);

我的 Jpa 存储库

@RepositoryRestResource
public interface UserRepository extends JpaRepository<User, Long> {}

用户实体

@Data
@Entity
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen")
  @SequenceGenerator(initialValue = 1, allocationSize = 1, name = "idgen", sequenceName = "userseq")
  private Long id;

  @NotNull
  private String credentials;

  private boolean isAdmin;
}

超级奇怪的是我通过 REST 接口插入的条目有效!

因此,如果我创建:

结果GET /api/usersA, C

拔掉我所有的头发后。我想我已经把它缩小到了 Oracle 的闪回特性。因为只有 A 和 C 在闪回中有条目。因此,Hibernate 必须在幕后施展魔法。

所以我的问题是。如何使用 SQL 插入一行,以便它也获得闪回条目。

如果闪回的事情不是问题。那么如何让 Hibernate 返回所有行呢?

标签: oraclehibernatespring-bootspring-data-jpaflashback

解决方案


当您在Oracle Sql Developer中执行 SQL 查询时,它正在运行自己的会话。JPA 正在自己的会话中工作。即 JPA 无法访问 SQL 查询的记录。

解决方案

Insert into SYSTEM.USER (ID,CREDENTIALS,ISADMIN) values (USERSEQ.nextval,'foo',1);

之后只需触发Oracle Sql DeveloperCOMMIT中的命令。

它对我有用。


推荐阅读