Hibernate 不返回手动插入的行
Posted
技术标签:
【中文标题】Hibernate 不返回手动插入的行【英文标题】:Hibernate doesn't return manually INSERTed rows 【发布时间】: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 APIGET /api/users
的结果是A, C
拔掉我所有的头发后。我想我已经把它缩小到了 Oracle 的闪回特性。因为只有 A 和 C 在闪回中有条目。因此,Hibernate 必须在幕后施展魔法。
所以我的问题是。如何使用 SQL 插入一行,以便它也获得闪回条目。
如果闪回不是问题。那么如何让 Hibernate 返回所有行呢?
【问题讨论】:
你commit
你的insert
了吗?
嗯不知道oracle中有commit
关键字:)
@MarmiteBomber COMMIT WORK;
工作!谢谢!
乐于助人;) 是的,如果您使用 INSERT
语句,则没有 autocommit=TRUE
。
【参考方案1】:
当您在 Oracle Sql Developer 中执行 SQL 查询时,它正在运行自己的会话。 JPA 正在自己的会话中工作。即 JPA 无法访问 SQL 查询的记录。
解决方案
Insert into SYSTEM.USER (ID,CREDENTIALS,ISADMIN) values (USERSEQ.nextval,'foo',1);
之后,只需在 Oracle Sql Developer 中触发 COMMIT
命令。
它对我有用。
【讨论】:
以上是关于Hibernate 不返回手动插入的行的主要内容,如果未能解决你的问题,请参考以下文章
批量更新从更新返回了意外的行数(Spring/Hibernate)
org.hibernate.StaleStateException:批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期:1
org.hibernate.StaleStateException:批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期:1
HIbernate“StaleStateException:批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期:1”
org.hibernate.StaleStateException:批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期的