gpt4 book ai didi

java - 如何在 Hibernate 上实现 GenericDAO 类

转载 作者:行者123 更新时间:2023-11-30 10:46:20 31 4
gpt4 key购买 nike

我希望 UserDao 类扩展 GenericDAO,我将在其中拥有所有 CRUD 方法。我读过 IBM 的文章:http://www.ibm.com/developerworks/java/library/j-genericdao/index.html ,但我无法实现。有人可以根据我的自定义 UserDao 类向我展示示例。

@Transactional(value="myTransactionManager")
public class UserDao {

@Qualifier("mySessionFactory")
public SessionFactoryImpl sessionFactory;

public void setSessionFactory(SessionFactoryImpl sessionFactory) {
this.sessionFactory = sessionFactory;
}

public List<UserEntity> getAll() {
Query query = sessionFactory.getCurrentSession().createQuery(
"from UserEntity ");
List<UserEntity> userList = query.list();
return userList;
}

public void updaet(UserEntity userEntity) {
sessionFactory.getCurrentSession().update(userEntity);
}

public void delete(UserEntity userEntity) {
sessionFactory.getCurrentSession().delete(userEntity);
}

public void save(UserEntity userEntity) {
sessionFactory.getCurrentSession().save(userEntity);
}

}

我试过这样写类

public class GenericDao{

@Qualifier("mySessionFactory")
public SessionFactoryImpl sessionFactory;

public void setSessionFactory(SessionFactoryImpl sessionFactory) {
this.sessionFactory = sessionFactory;
}

public <T> List<T> getAll(Class<T> t) {
Query query = sessionFactory.getCurrentSession().createQuery(
"from " + t.getName());
List<T> list = query.list();
return list;
}

public <T> void save(T t) {
sessionFactory.getCurrentSession().save(t);
}

public <T> void update(T t) {
sessionFactory.getCurrentSession().update(t);
}

public <T> void delete(T t) {
sessionFactory.getCurrentSession().delete(t);
}
}

但是当我尝试像这样使用 UserDao 提取数据时:

public List<UserEntity> getAll() {
List<UserEntity> list = UserDao.findAll();
}

List<UserEntity> list = UserDao.findAll(); 行的 Eclipse IDE给出错误:方法findAll()对于类型 UserDao 是欠定义的。

最佳答案

这是我的实现:

通用道:

@Repository
public class GenericDao<T extends DbObject> {

@Autowired
private SessionFactory sessionFactory;

private Class<T> getParameterizedClass() {
return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

public T findById(final Serializable id) {
return (T) getCurrentSession().get(getParameterizedClass(), id.toString());
}

public void persist(final T object) {
getCurrentSession().persist(object);
}

public void saveOrUpdate(final T object) {
getCurrentSession().saveOrUpdate(object);
}

public void delete(final T object) {
getCurrentSession().delete(object);
}

public T merge(final T object) {
return (T) getCurrentSession().merge(object);
}

}

用户道:

public class UserDao extends GenericDao<User> {

}

实体:

@Entity
@Table(name = "...")
public class User extends DbObject {
}

关于java - 如何在 Hibernate 上实现 GenericDAO 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36591846/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com