@ManyToOne目前我有一个与其父实体有关联的子实体。以前的开发人员已经将此字段设置为lazy="false"在会话关闭时在需要时获取父级,但是我决定它应该是lazy="true"因为它并不总是使用但是这样做时我遇到了LazyInitializationException,因为会话已关闭并且子级与尝试获取父级时的会话。
我想知道将如下所示的方法的更多逻辑移动run到与 s 交互的服务类是否正确,DAO因此我可以避免异常,因为当前服务类就像普通类一样,DAO注入了所需的 s 并且它们只是调用方法并DAO返回结果。我是否应该在与实体交互的服务类中放置更多方法,这将获取用户并检查所有登录操作,如果需要则获取父级,然后将登录结果返回给run方法..
public class Login extends Runnable {
private UserService userService;
...
public void run() {
...
User user = userSerivce.getById(id);
Account account = user.getAccount(); //LazyInitializationException
...
if (account.isLocked()) {
...
}
...
userService.save(user);
//Send some message to the user..
}
}
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
...
public User getById(long id) {
return userDAO.getById(id);
}
public void save(User user) {
userDAO.save(user);
}
}
public UserDAOImpl implements UserDAO {
private SessionFactory factory;
...
public User getById(long id) {
return (User) factory.getCurrentSession().load(User.class, id);
}
public void save(User user) {
factory.getCurrentSession().saveOrUpdate(user);
}
}
我使用 Spring<tx:advice>来处理关闭和其他与事务相关的事情。