我正在使用Spring 3 + Hibernate,我有两个与@ManyToMany关系相互关联的实体(User,Address)。每个实体都映射在一个表('user'和'address')上,并且该关系由映射user_id和address_id的链接表'user_address'定义。
我有“method1”,可以在添加新地址时保存“用户”:
@Transactional
public void method1 (...) {
/* do something*/
user.getAddresses().add(address);
session.save(user);
}
在另一种方法2中我需要为特定用户检索一个街道地址:
@Transactional
public Address method2 (Long userId, String streetName) {
String hql = "select distinct a from Address a " +
"join a.users u " +
"where u.id=:id and a.name=:name";
Query query = session.createQuery(hql);
query.setParameterList("id", userId);
query.setParameterList("name", streetName);
Address address = query.uniqueResult();
return address;
}
这种情况下的问题是当通过method1添加新地址时,当执行method2时它仍然可能在缓存中(因此没有返回地址),因为method2命中数据库(这可能是不同步的方面)缓存)。 我找到的唯一解决方案是在method1之后添加“flush”,但我真的不喜欢它。你知道更好的方法吗?
答案 0 :(得分:0)
在某些方法中手动调用session.flush()并不是一个坏主意,至少对我而言。
还有其他选择: