这是我的实体:
@Entity
public class Actor {
private List<Film> films;
@ManyToMany
@JoinTable(name="film_actor",
joinColumns =@JoinColumn(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 =@JoinColumn(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;
所以我的问题是:
当我从演员中删除电影并合并该演员并检查数据库时,我发现一切都很好。假设演员 ID 为 5,电影 ID 为 3,我看到这些 id 已从 film_actor 表中删除。
问题是,在我的 JSF 项目中,尽管我的 bean 是请求范围的,并且它们应该获取新信息,但对于电影部分,它们没有。他们仍然给我带来了 id = 3 的 Actor 用于 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。每次我访问这个 bean 时,allFilms 最初都是空的。因此从数据库中获取新数据。但是,此获取的数据与数据库中的数据不匹配。它仍然带来了演员。
所以我猜这就像一个缓存问题。
有什么帮助吗?
编辑:只有在我重新启动服务器后,JPA 获取的信息才是正确的。
编辑:这也无济于事:
@Entity
public class Film {
private short filmId;
@ManyToMany(mappedBy = "films", fetch = FetchType.EAGER)
public List<Actor> getActors(){
return actors;
}