Bab*_*ily 1 persistence jpa eclipselink jakarta-ee
我正在将 EclipseLink 用于 JPA 持久性,而且我对这项技术非常陌生。我遇到了一种情况,我不得不更新 oracle 数据库中表中的一个条目,并且我在数据库中成功提交了此更新,但它没有反映在 JPA 实体中,这意味着我无法在前端看到数据,但是一旦我重启tomcat服务器,就可以看到前端的数据了。有人请帮助我后端发生了什么。
提前致谢!
安全数据表
import java.util.Date;
@Entity
@Table(name="SDS")
@XmlRootElement
public class SDS {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long sdsId;
@Column
private String sdsNumber;
@Column
private String sdsName;
@Column
private String sapId;
@Column(name = "DATE_FIELD")
@Temporal(TemporalType.TIMESTAMP)
private Date sdsDate;
public SDS() {}
public Long getSdsId() {
return sdsId;
}
public void setSdsId(Long sdsId) {
this.sdsId = sdsId;
}
public String getSdsNumber() {
return sdsNumber;
}
public void setSdsNumber(String sdsNumber) {
this.sdsNumber = sdsNumber;
}
public String getSdsName() {
return sdsName;
}
public void setSdsName(String sdsName) {
this.sdsName = sdsName.substring(0, Math.min(sdsName.length(), 254));
//this.sdsName = sdsName;
}
public Date getSdsDate() {
return sdsDate;
}
public void setSdsDate(Date sdsDate) {
this.sdsDate = sdsDate;
}
}
Run Code Online (Sandbox Code Playgroud)
数据库更新:
update SDS set date_field='10-FEB-2017' where sdsid=1102
Run Code Online (Sandbox Code Playgroud)
小智 5
更新可能不会反映出来,因为当您使用 EntityManager 的“查找”方法获取实体时,EntityManager 会在持久性上下文中找到它,而不是在数据库中。
如果实体实例包含在持久化上下文中,则从那里返回
entityManager.refresh(entity) 为我同步了实体与数据库。
entityManager.flush() 不起作用(即使提交了所有内容)。
entityManager.clear() 或从 EntityManagerFactory 获取新的 EntityManager 也没有帮助。
当您在 SQL SELECT 中使用“createNativeQuery”而不是“find”方法时,似乎也会发生同样的情况。
哦!看我发现了什么。
默认情况下,EclipseLink 使用共享对象缓存,该缓存缓存为持久性单元读取和持久化的所有对象的子集。EclipseLink 共享缓存不同于本地 EntityManager 缓存。共享缓存在持久性单元(EntityManagerFactory,或服务器)的持续时间内存在,并由持久性单元的所有 EntityManager 和用户共享。本地 EntityManager 缓存不共享,仅在 EntityManager 或事务期间存在。
也可以禁用共享缓存。
属性名称="eclipselink.cache.shared.default" 值="false"
| 归档时间: |
|
| 查看次数: |
3550 次 |
| 最近记录: |