だから私はそのようなクラスを持っています
BaseDao
public interface BaseDao<T> {
T save(T entity);
}
UserDao
public interface UserDao extends BaseDao<User> {
User getUserByUserName(String name);
}
GenericDaoパブリック抽象クラスGenericDaoはBaseDaoを実装します{
@Autowired
protected SessionFactory sessionFactory;
private Class<?> getEntityClass() {
return ((Class) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0]);
}
public T save(T entity) {
Integer id = (Integer) sessionFactory.getCurrentSession().save(entity);
return (T) sessionFactory.getCurrentSession().get(getEntityClass(), id);
}
}
UserDaoImpl
@Repository
public class PgUserDaoImpl extends GenericDao<User> implements UserDao {
public User getUserByUserName(String name) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
User.class);
criteria.add(Restrictions.eq("name", name));
return (User) criteria.uniqueResult();
}
}
GenericService
public class GenericService<T extends GenericDao<E>, E> {
protected T dao;
public GenericService(T dao) {
setDao(dao);
}
@Transactional
public E save(E entity) {
return dao.save(entity);
}
}
UserServiceImpl
@Service("userServiceImpl")
public class UserServiceImpl extends GenericService<PgUserDaoImpl, User>
implements UserService {
@Autowired
public UserServiceImpl(PgUserDaoImpl dao) {
super(dao);
}
@Autowired
private UserAssebmler assebmler;
@Transactional
@Override
public UserDetails loadUserByUsername(String name)
throws UsernameNotFoundException {
.....
}
}
したがって、ユーザーを保存するためにテストコントローラーを作成しますが、常に例外 org.hibernate.HibernateExceptionが発生します:スレッドにバインドされたHibernateセッションがなく、構成ではここで非トランザクションセッションを作成できません
コントローラー@
Controller
@RequestMapping(value = "/test")
public class TestController {
@Autowired
private UserServiceImpl userService;
@RequestMapping(value = "save", method = RequestMethod.GET)
public String test() {
User user = new User();
user.setName("admin");
user.setPassword("21232f297a57a5a743894a0e4a801fc3");
user.setRole(UserRole.ADMIN);
userService.save(user);
return "home";
}
}
誰かがそれを修正するために熱く知っていますか?ありがとう :)