【问题标题】:Hibernate doesn't return manually INSERTed rowsHibernate 不返回手动插入的行
【发布时间】:2019-02-22 16:25:09
【问题描述】:

我的 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 接口插入的条目有效!

所以如果我创建:

  • 用户 A 通过 REST API
  • 用户 B 通过 SQL 语句
  • 用户 C 通过 REST API

GET /api/users 的结果是A, C

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

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

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

【问题讨论】:

  • commit你的insert了吗?
  • 嗯不知道oracle中有commit关键字:)
  • @MarmiteBomber COMMIT WORK; 工作!谢谢!
  • 乐于助人;) 是的,如果您使用 INSERT 语句,则没有 autocommit=TRUE

标签: oracle hibernate spring-boot spring-data-jpa flashback


【解决方案1】:

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

解决方案

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

之后,只需在 Oracle Sql Developer 中触发 COMMIT 命令。

它对我有用。

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2022-10-13
    相关资源
    最近更新 更多