0

だから私はそのようなクラスを持っています

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";
    }

}

誰かがそれを修正するために熱く知っていますか?ありがとう :)

4

1 に答える 1

0

HibernateDaoSupportクラスからGenericDaoクラスを拡張することで、質問を解決しました。

于 2012-09-13T11:15:31.040 に答える