我想要什么:当我给工厂打电话给一个新的随机人员时,我想得到每一次。
我得到的结果:我每次都得到相同的人名单。显而易见的原因是,工厂方法只创建一个新对象,如果当前对象为空,即仅在第一次工厂调用时。
我如何更改代码,每次都得到一个新对象?
谢谢!
@Logger private Log log;
@In private EntityManager entityManager;
@In private LocaleSelector localeSelector;
@Factory("personList")
public List<Person> createPersonList() {
log.info("Creating Person List.");
return entityManager.createQuery(
"SELECT p FROM Person p ORDER by random()")
.setMaxResults(3)
.getResultList();
}
答案 0 :(得分:1)
您可以使用METHOD范围:
@Factory(value="personList", scope=ScopeType.METHOD)
public List<Person> createPersonList() {
从技术上讲,METHOD范围仅供内部使用,因此如果每个HTTP请求的新列表都可以接受,我会使用ScopeType.EVENT
。