2017-03-03 73 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」值=「假」

相關問題