我正在实现一个基于 spring 3.2.8、jpa2.1 和 hibernate 4.3.5 的网络应用程序。我想知道如何防止休眠缓存特定的Named Stored Procedure Query
.
我尝试过 entityManager.clear(),但我认为它会清除所有缓存的实体值,因此它不是最佳解决方案!
注意:我@NamedStoredProcedureQueries
之前是定义存储过程,通过
entityManager.createNamedStoredProcedureQuery()
方法调用获取结果
添加:
表人:
person{p# as PK, ...}
表person_value:
person_value{pv# as PK, p# as foreign key from table person, ...}
查看视图1:
select *,check_value(dbo.person.p#) as has_value from person
功能检查值(输入):
如果 person_value 中存在 p# 等于输入的记录,则返回 1。
存储过程SPS_VIEW1:
select * from view1
where p#=@p#
sql server view view1的实体类:
@Entity
@Table(name = "view1")
@NamedStoredProcedureQueries(
@NamedStoredProcedureQuery(name = "getV1Records", procedureName = "SPS_VIEW1",
resultClasses = View1.class,
@parameters = {@StoredProcedureParameter(name = "p#", type = String.class)))
public class View1{
@Id
@Column(name = "p#")
private String personId;
@Column(name = "hasValue")
private boolean value;
<getters and setters>
}
服务等级:
@Service("personService")
public class PersonService() {
...
private EntityManager entityManager;
<getters and setters>
...
public List<View1> getAll(String pno) {
SqlParameterValue p = new SqlParameterValue(new SqlParameter("p#", Types.VARCHAR), pno);
StoredProcedureQuery spq = entityManager.createNamedStoredProcedureQuery("getV1Records");
spq.setParameter(p.getName(), p.getValue());
return list;
}
}
控制器类:
@Controller("PersonController")
public class PersonController {
...
@Autowired
private PersonService personService;
...
@RequestMapping("/person")
public personInfo(HttpServletRequest request) {
String pno = request.getParameter("pno");
ModelAndView mv = new ModelAndView("person");
List<View1> list = personService.getAll(pno);
mv.addObject("view1_list", list);
return mv;
}
...
}
当我第一次在我的控制器中getAll()
使用p#例如'p14521'调用时,表 person_value 中没有 p# 'p14521' 的记录,它会正常工作并且一切正常,但是当我向 person_value 添加记录时p# 'p14521',现在有一条记录 p# 'p14521',getAll()
再次调用输出列表不会发生任何事情。查询的输出列表似乎被缓存了。