Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring、JPA和Hibernate的通用DAO设置_Java_Spring_Hibernate - Fatal编程技术网

Java 使用Spring、JPA和Hibernate的通用DAO设置

Java 使用Spring、JPA和Hibernate的通用DAO设置,java,spring,hibernate,Java,Spring,Hibernate,我试图编写一个通用代码,在任何实体上实现一些最常见的操作。我已经使用SpringInitializer使用Gradle、SpringBoot2.1.0Snapshot、JPA和Hibernate生成了产品的基础。我使用MySQL Workbench创建了模式和表,并使用它为我的项目生成实体。因此,谈到实际问题,我尝试创建一个通用DAO,其中一些常见操作(如findbyid、edit、delete、create、update、getall)将被实现,然后将其扩展到其他DAO类,以提高可重用性并加快

我试图编写一个通用代码,在任何实体上实现一些最常见的操作。我已经使用SpringInitializer使用Gradle、SpringBoot2.1.0Snapshot、JPA和Hibernate生成了产品的基础。我使用MySQL Workbench创建了模式和表,并使用它为我的项目生成实体。因此,谈到实际问题,我尝试创建一个通用DAO,其中一些常见操作(如findbyid、edit、delete、create、update、getall)将被实现,然后将其扩展到其他DAO类,以提高可重用性并加快工作速度。这是我到目前为止的代码:

UserController.java

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    @ResponseBody
    public UserEntity getUser() throws Exception {
        userService.getUser();
    }
}
public interface UserService {
    UsersEntity getUser();
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDAO userDAO;

    @Transactional
    public UsersEntity getUser() {
        return userDAO.find(Long.valueOf("123"));
    }
}
public interface UserDAO extends GenericRepositoryInterface<UsersEntity> {
}
@Repository
public abstract class UserDAOImpl implements UserDAO {
}
public interface GenericRepositoryInterface<T> {
    T save(T emp);
    Boolean delete(T emp);
    T edit(T emp);
    T find(Long empId);
}
@Repository
public class GenericRepositoryImplementation<T> implements GenericRepositoryInterface<T> {

    protected EntityManager entityManager;
    private T type;

    public GenericRepositoryImplementation(T type) {
        // TODO Auto-generated constructor stub
        this.type = type;
    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public T save(T emp) {
        // TODO Auto-generated method stub
        entityManager.persist(emp);
        entityManager.flush();
        return emp;
    }

    @Override
    public Boolean delete(T emp) {
        // TODO Auto-generated method stub
        try {
            entityManager.remove(emp);
        } catch (Exception ex) {
            return false;
        }
        return true;
    }

    @Override
    public T edit(T emp) {
        // TODO Auto-generated method stub
        try{
            return entityManager.merge(emp);
        } catch(Exception ex) {
            return null;
        }
    }

    @Override
    public T find(Long empId) {
        // TODO Auto-generated method stub
        return (T) entityManager.find(type.getClass(), empId);
    }
}
UserService.java

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    @ResponseBody
    public UserEntity getUser() throws Exception {
        userService.getUser();
    }
}
public interface UserService {
    UsersEntity getUser();
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDAO userDAO;

    @Transactional
    public UsersEntity getUser() {
        return userDAO.find(Long.valueOf("123"));
    }
}
public interface UserDAO extends GenericRepositoryInterface<UsersEntity> {
}
@Repository
public abstract class UserDAOImpl implements UserDAO {
}
public interface GenericRepositoryInterface<T> {
    T save(T emp);
    Boolean delete(T emp);
    T edit(T emp);
    T find(Long empId);
}
@Repository
public class GenericRepositoryImplementation<T> implements GenericRepositoryInterface<T> {

    protected EntityManager entityManager;
    private T type;

    public GenericRepositoryImplementation(T type) {
        // TODO Auto-generated constructor stub
        this.type = type;
    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public T save(T emp) {
        // TODO Auto-generated method stub
        entityManager.persist(emp);
        entityManager.flush();
        return emp;
    }

    @Override
    public Boolean delete(T emp) {
        // TODO Auto-generated method stub
        try {
            entityManager.remove(emp);
        } catch (Exception ex) {
            return false;
        }
        return true;
    }

    @Override
    public T edit(T emp) {
        // TODO Auto-generated method stub
        try{
            return entityManager.merge(emp);
        } catch(Exception ex) {
            return null;
        }
    }

    @Override
    public T find(Long empId) {
        // TODO Auto-generated method stub
        return (T) entityManager.find(type.getClass(), empId);
    }
}
UserServiceImpl.java

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    @ResponseBody
    public UserEntity getUser() throws Exception {
        userService.getUser();
    }
}
public interface UserService {
    UsersEntity getUser();
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDAO userDAO;

    @Transactional
    public UsersEntity getUser() {
        return userDAO.find(Long.valueOf("123"));
    }
}
public interface UserDAO extends GenericRepositoryInterface<UsersEntity> {
}
@Repository
public abstract class UserDAOImpl implements UserDAO {
}
public interface GenericRepositoryInterface<T> {
    T save(T emp);
    Boolean delete(T emp);
    T edit(T emp);
    T find(Long empId);
}
@Repository
public class GenericRepositoryImplementation<T> implements GenericRepositoryInterface<T> {

    protected EntityManager entityManager;
    private T type;

    public GenericRepositoryImplementation(T type) {
        // TODO Auto-generated constructor stub
        this.type = type;
    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public T save(T emp) {
        // TODO Auto-generated method stub
        entityManager.persist(emp);
        entityManager.flush();
        return emp;
    }

    @Override
    public Boolean delete(T emp) {
        // TODO Auto-generated method stub
        try {
            entityManager.remove(emp);
        } catch (Exception ex) {
            return false;
        }
        return true;
    }

    @Override
    public T edit(T emp) {
        // TODO Auto-generated method stub
        try{
            return entityManager.merge(emp);
        } catch(Exception ex) {
            return null;
        }
    }

    @Override
    public T find(Long empId) {
        // TODO Auto-generated method stub
        return (T) entityManager.find(type.getClass(), empId);
    }
}
UserDAO.java

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    @ResponseBody
    public UserEntity getUser() throws Exception {
        userService.getUser();
    }
}
public interface UserService {
    UsersEntity getUser();
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDAO userDAO;

    @Transactional
    public UsersEntity getUser() {
        return userDAO.find(Long.valueOf("123"));
    }
}
public interface UserDAO extends GenericRepositoryInterface<UsersEntity> {
}
@Repository
public abstract class UserDAOImpl implements UserDAO {
}
public interface GenericRepositoryInterface<T> {
    T save(T emp);
    Boolean delete(T emp);
    T edit(T emp);
    T find(Long empId);
}
@Repository
public class GenericRepositoryImplementation<T> implements GenericRepositoryInterface<T> {

    protected EntityManager entityManager;
    private T type;

    public GenericRepositoryImplementation(T type) {
        // TODO Auto-generated constructor stub
        this.type = type;
    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public T save(T emp) {
        // TODO Auto-generated method stub
        entityManager.persist(emp);
        entityManager.flush();
        return emp;
    }

    @Override
    public Boolean delete(T emp) {
        // TODO Auto-generated method stub
        try {
            entityManager.remove(emp);
        } catch (Exception ex) {
            return false;
        }
        return true;
    }

    @Override
    public T edit(T emp) {
        // TODO Auto-generated method stub
        try{
            return entityManager.merge(emp);
        } catch(Exception ex) {
            return null;
        }
    }

    @Override
    public T find(Long empId) {
        // TODO Auto-generated method stub
        return (T) entityManager.find(type.getClass(), empId);
    }
}
GenericRepositoryInterface.java

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    @ResponseBody
    public UserEntity getUser() throws Exception {
        userService.getUser();
    }
}
public interface UserService {
    UsersEntity getUser();
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDAO userDAO;

    @Transactional
    public UsersEntity getUser() {
        return userDAO.find(Long.valueOf("123"));
    }
}
public interface UserDAO extends GenericRepositoryInterface<UsersEntity> {
}
@Repository
public abstract class UserDAOImpl implements UserDAO {
}
public interface GenericRepositoryInterface<T> {
    T save(T emp);
    Boolean delete(T emp);
    T edit(T emp);
    T find(Long empId);
}
@Repository
public class GenericRepositoryImplementation<T> implements GenericRepositoryInterface<T> {

    protected EntityManager entityManager;
    private T type;

    public GenericRepositoryImplementation(T type) {
        // TODO Auto-generated constructor stub
        this.type = type;
    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public T save(T emp) {
        // TODO Auto-generated method stub
        entityManager.persist(emp);
        entityManager.flush();
        return emp;
    }

    @Override
    public Boolean delete(T emp) {
        // TODO Auto-generated method stub
        try {
            entityManager.remove(emp);
        } catch (Exception ex) {
            return false;
        }
        return true;
    }

    @Override
    public T edit(T emp) {
        // TODO Auto-generated method stub
        try{
            return entityManager.merge(emp);
        } catch(Exception ex) {
            return null;
        }
    }

    @Override
    public T find(Long empId) {
        // TODO Auto-generated method stub
        return (T) entityManager.find(type.getClass(), empId);
    }
}

我不知道为什么,但在提到的位置存在一个UserDAO类,它无法识别它。我是否遗漏了任何注释或任何内容?

未找到
UserDAO
的实现

您希望扩展通用DAO实现:

@Repository
public class UserDAOImpl extends GenericRepositoryImplementation< UsersEntity> implements UserDAO {
     public UserDaoImpl() {
          super(UsersEntity.class);
     }
}

我认为问题在于你的UserDAOImpl。
在这里,您试图注入一个抽象类的依赖项。为userDao提供具体的类,然后将其注入控制器/服务

谢谢!我完全忽略了一个问题,即我使用的是一个抽象类,扩展没有正确完成。