【发布时间】:2015-01-28 22:22:38
【问题描述】:
我的实体中有一个延迟获取的字段
@ElementCollection(fetch = LAZY)
private List<String> emails;
而且我的事务边界在服务类停止,我不想在呈现视图时保持打开状态。我希望我的服务类返回分离的实体。
在我的服务类中,我尝试调用 getter,但这似乎被编译器删除了——也许这是对似乎什么都不做的语句的优化
/* User Service class */
@Transactional
public List<User> getAllUsers() {
List<User> users = new ArrayList();
for(User u : userRepo.findAll()) {
u.getEmails(); // <-- this seem to be erased by the compiler optimization.
users.add(u);
}
return users;
}
因此,我不得不将惰性字段打印到 TRACE 日志中,这样它就不会弄乱生产日志。这样做将确保在实体分离之前预先填充惰性字段:
LOG.trace(u.getEmails().toString());
但是,这个解决方案一点也不漂亮。有没有更好的方法来做到这一点?
我不想将该字段标记为 EAGER,因为我有另一种服务方法,为了提高效率而故意跳过关系。
【问题讨论】: