2017-03-03 72 views
0

我使用EclipseLink进行JPA持久化,并且我对这项技术很陌生。我是在一个情况下,我不得不更新在oracle数据库表中的一个条目,我确实在数据库中提交了此更新,但它不反映在JPA实体意味着我看不到数据在前端,但一旦我重启tomcat服务器,我可以看到前端的数据。有人请帮助我后台发生的事情。数据库中的更新未反映在JPA实体中

在此先感谢!

SDS.java

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; 
} 
} 

数据库更新:

update SDS set date_field='10-FEB-2017' where sdsid=1102 
+1

我们展示的保存方法 –

+0

你应该张贴您的代码数据库更新,并说明你是如何检查更新不体现在JPA中。另外,请检查日志以查看是否有任何错误消息。 –

+0

您可能正在为每个请求重复使用同一个EntityManager,因此该实体位于第一级缓存中。不要这样做。创建一个新的EM,启动一个事务,获取日期,提交事务,关闭EM。或者使用Spring,它为您完成所有这些工作并支持声明性事务。 –

回答

0

更新可能不会反映,因为当你使用EntityManager的让你的实体“发现”的方法的EntityManager中找到它的持久化上下文,不在数据库中。

如果实体实例包含在持久化上下文,从那里

entityManager.refresh(实体)同步的实体与数据库对我来说是返回。

entityManager.flush()不起作用(即使提交了所有内容)。

entityManager.clear()或从EntityManagerFactory获取新的EntityManager也没有帮助。

而且,当您将“createNativeQuery”用于SQL SELECT而不是“find”方法时,似乎也会发生同样的情况。

哦!看我发现了什么。

默认情况下,EclipseLink使用共享对象高速缓存,该对象高速缓存会为持久性单元读取并持久化所有对象的子集。 EclipseLink共享缓存与本地EntityManager缓存不同。共享缓存在持久性单元(EntityManagerFactory或服务器)期间存在,并且由所有EntityManagers和持久性单元的用户共享。本地EntityManager缓存不共享,只存在于EntityManager或事务处理期间。

也可以禁用共享缓存。

属性名=“eclipselink.cache.shared.default”值=“假”

相关问题