我试图将自定义方法添加到我的spring存储库中,但是它会引发错误。以下是我正在使用的代码段。 CommonDAO有我尝试添加的额外方法。用户是我要操作的实体。问题是Spring将方法视为用户实体的属性,而不是单独的方法。你能让我知道我在想什么吗?

仓库接口和实现

    public interface CommonDAO<T> {
              public T merge(T t);
         }

    public interface UserDAOJPA extends JpaRepository<User, Integer>, CommonDAO<User> {
        public User findByUsername(String userName);
    }


@Repository(value="jpaBean")
public class UserDAOImplJPA implements CommonDAO<User> {

    @PersistenceContext
    private EntityManager em;

    @Override
    public User merge(User user) {
        return em.merge(user);
    }
}


服务等级

@Service
public class UserManagerJPAImpl implements UserManager {

    @Autowired
    private UserDAOJPA userDAO;


    @Override
    @Transactional
    public void insertUser(User user) {
        userDAO.save(user);
    }

    @Override
    @Transactional
    public User getUserById(int userId) {
        return userDAO.findOne(userId);
    }

    @Override
    @Transactional
    public User getUser(String username) {
        return userDAO.findByUsername(username);
    }

    @Override
    @Transactional
    public List<User> getUsers() {
        return userDAO.findAll();
    }

    @Override
    @Transactional
    public User mergeUser(User user) {
        return userDAO.merge(user);
    }

    /**
     * @param userDAO the userDAO to set
     */
    public void setUserDAO(UserDAOJPA userDAO) {
        this.userDAO = userDAO;
    }

}


测试班

public class TestTx {
    public static void main(String[] args) {
        ApplicationContext ctx =
                new ClassPathXmlApplicationContext("app-context.xml");
/*      UserManager userManagerTraditional =
                (UserManager) ctx.getBean("userManagerImpl");*/

        UserManager userManager =
                (UserManager) ctx.getBean("userManagerJPAImpl");

        User user = new User();
        user.setUsername("johndoe");
        user.setName("John Doe");

        userManager.insertUser(user);

        System.out.println("User inserted!");

        user = userManager.getUser("johndoe");

        System.out.println("\nUser fetched by username!"
                + "\nId: " + user.getId()
                + "\nUsername: " + user.getUsername()
                + "\nName: " + user.getName());

        user.setName("After change");
        userManager.mergeUser(user);
        //user = userManagerTraditional.getUserById(user.getId());

        System.out.println("\nUser fetched by ID!"
                + "\nId: " + user.getId()
                + "\nUsername: " + user.getUsername()
                + "\nName: " + user.getName());

        List<User> users = userManager.getUsers();

        System.out.println("\nUser list fetched!"
                + "\nUser count: " + users.size());
    }
}


我得到的错误没有找到类型为User的属性合并!


  15:25:03,995信息a.LocalContainerEntityManagerFactoryBean:462-
  关闭持久性单元“ testPU”的JPA EntityManagerFactory
  线程“主”中的异常
  org.springframework.beans.factory.BeanCreationException:错误
  创建名称为“ userDAOJPA”的bean:初始化方法的调用
  失败嵌套异常为
  org.springframework.data.mapping.PropertyReferenceException:否
  找到类型为User的属性合并!在
  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    在
  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    在
  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    在
  org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:303)
    在
  org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    在
  org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    在
  org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    在
  org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:736)
    在
  org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    在
  org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    在
  org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
    在
  org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
    在com.debopam.sprintx.TestTx.main(TestTx.java:14)上
  org.springframework.data.mapping.PropertyReferenceException:否
  找到类型为User的属性合并!在
  org.springframework.data.mapping.PropertyPath。(PropertyPath.java:75)
    在
  org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
    在
  org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
    在
  org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)
    在
  org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241)
    在
  org.springframework.data.repository.query.parser.Part。(Part.java:76)
    在
  org.springframework.data.repository.query.parser.PartTree $ OrPart。(PartTree.java:235)
    在
  org.springframework.data.repository.query.parser.PartTree $ Predicate.buildTree(PartTree.java:373)
    在
  org.springframework.data.repository.query.parser.PartTree $ Predicate。(PartTree.java:353)
    在
  org.springframework.data.repository.query.parser.PartTree。(PartTree.java:84)
    在
  org.springframework.data.jpa.repository.query.PartTreeJpaQuery。(PartTreeJpaQuery.java:61)
    在
  org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:95)
    在
  org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:206)
    在
  org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:73)
    在
  org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor。(RepositoryFactorySupport.java:347)
    在
  org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:185)
    在
  org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
    在
  org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
    在
  org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
    在
  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    在
  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ...另外12个

最佳答案

您的课程UserDAOImplJPA被错误命名。实际名称应为UserDAOJPAImpl

请从文档中找到以下内容。

对于该类,最重要的一点是与核心存储库接口相比,其名称上的Impl后缀(请参见下文)。

有关更多信息,请参考Spring Docs

09-09 22:33
查看更多