沒有更新的多對多關係下面是我的實體:JPA在返回結果
@Entity
public class Actor {
private List<Film> films;
@ManyToMany
@JoinTable(name="film_actor",
joinColumns [email protected](name="actor_id"),
inverseJoinColumns = @JoinColumn(name="film_id"))
public List<Film> getFilms(){
return films;
}
//... more in here
繼續前進:
@Entity
public class Film {
private List actors;
@ManyToMany
@JoinTable(name="film_actor",
joinColumns [email protected](name="film_id"),
inverseJoinColumns = @JoinColumn(name="actor_id"))
public List<Actor> getActors(){
return actors;
}
//... more in here
和連接表:
@javax.persistence.IdClass(com.tugay.sakkillaa.model.FilmActorPK.class)
@javax.persistence.Table(name = "film_actor", schema = "", catalog = "sakila")
@Entity
public class FilmActor {
private short actorId;
private short filmId;
private Timestamp lastUpdate;
所以我的問題是:
當我刪除來自Actor的影片併合並該Actor,並檢查數據庫,我發現一切都很好。說演員ID是5,電影ID是3,我看到這些ID是從film_actor表中刪除的。
問題是,在我的JSF項目中,儘管我的bean被請求作用域並且它們應該被假定爲了獲取新的信息,對於電影部分,他們沒有。他們還帶我演員與ID = 3的電影使用id = 5。這裏是一個示例代碼:
@RequestScoped
@Named
public class FilmTableBackingBean {
@Inject
FilmDao filmDao;
List<Film> allFilms;
public List<Film> getAllFilms(){
if(allFilms == null || allFilms.isEmpty()){
allFilms = filmDao.getAll();
}
return allFilms;
}
}
因此,大家可以看到這是一個請求範圍豆。每次我訪問這個bean時,所有的影片最初都是空的。所以新的數據從數據庫中獲取。但是,此提取的數據與數據庫中的數據不匹配。它仍然帶來演員。
所以我猜這就像緩存問題。
任何幫助?
編輯:只有在重新啓動服務器後,JPA提取的信息纔是正確的。
編輯:這並沒有幫助:
@Entity
public class Film {
private short filmId;
@ManyToMany(mappedBy = "films", fetch = FetchType.EAGER)
public List<Actor> getActors(){
return actors;
}
你好,謝謝你的回答。只有在添加'em.getEntityManagerFactory()。getCache()。evictAll();在filmDao中我能看到變化。但這是唯一的方法嗎?我將如何知道何時清除緩存以及何時不清除?我可以禁用緩存以確保良好嗎? (如果db在請求之間沒有變化,我已經將數據保存在內存中了。) –
對不起,它似乎是因爲ActorDao和FilmDao都從GeneralDao擴展而來,並且他們沒有自己的實體管理器。 –