【发布时间】:2016-12-25 15:26:36
【问题描述】:
我有一个 oracle 视图,可以在其中查询我的数据库。
create or replace view my_view as
Select cc.CCID ccid
sm.SMCODE smcode,
NVL(sm.smname, cc.ccname) sname
From CC cc
Inner Join SM sm
On cc.id = sm.id;
我使用jpa 2.1 和hibernate 4.3.7 将我的视图映射到我的实体。
我的实体类如下所示:
public class CCRequest implements Serializable {
private static final long serialVersionUID = 1L;
private String ccId;
private String smCode;
private String sName;
}
我的映射 xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
version="2.1">
<entity class="CCRequest" name="CCRequest001">
<table name="my_view"/>
<attributes>
<id name="ccId">
<column name="ccid"/>
</id>
<basic name="smCode">
<column name="smcode"/>
</basic>
<basic name="sName">
<column name="sname"/>
</basic>
</attributes>
</entity>
</entity-mappings>
所以我用 jpa 正确查询了我的实体,它返回了我的所有记录。 这是问题所在,当我异步更改数据库中的数据时,令人震惊的是,我的 jpa 查询返回了以前的记录。 我是不是做错了什么?
【问题讨论】:
-
1.您是直接更改数据库中的数据还是通过 JPA/Hibernate 方法更改数据? - Hibernate 缓存以前的结果,因此如果您直接修改数据,则在清除缓存之前您不会看到更改。 2. 如果您使用 JPA/Hibernate 更改数据 - 您是否刷新/提交它们? 3.这也可能取决于你如何管理EntityManager或Session。
-
我直接改数据。但是在我的应用程序中,除了我的 JPA/Hibernate 方法之外,还有可能以其他方式更改数据。这里的解决方案是什么。你说这取决于我如何管理 EntityManage 是什么意思?
标签: java spring hibernate jpa sql-view