我遇到以下问题:当我在身份验证器中获取主体类(Account
),然后向其注入@Auth
批注时,我无法使用休眠方式获取任何延迟加载的属性,我收到异常消息,表明没有可用的会话。
@UnitOfWork
@PermitAll
@GET
public Response fetchCharacters(@Auth Account account) {
List<Character> chars = account.getCharacters();
return Response.status(Status.OK).entity(chars).build();
}
如果我使用额外的DAO类,则效果很好
@UnitOfWork
@PermitAll
@GET
public Response fetchCharacters(@Auth Account account) {
List<Character> chars = dao.getCharacters(account);
return Response.status(Status.OK).entity(chars).build();
}
虽然我可以做到这一点,因为它只是一个很小的缺点,但我想知道为什么这没有按我期望的那样工作。 我知道在获取身份验证器中的主体后,该会话显然已关闭,但是为什么要为DAO打开一个新的会话,而不为休眠的懒惰获取打开一个新会话?有没有办法解决这个问题,或者是否如预期的那样?