【问题标题】:This spring data query is not working这个弹簧数据查询不起作用
【发布时间】:2016-10-17 23:15:39
【问题描述】:

这是我的 UserRepository 和一个查找功能

@Repository
public interface UserRepository extends CrudRepository<JPA_Users, Long> {

    List<JPA_Users> findByName(String Name);

}

然后在其中一个控制器功能中,我尝试按如下方式访问此查找功能

  @RequestMapping(value = "/jpadata1", method = RequestMethod.GET)
   public String jpadata1(ModelMap map) {        
        UserRepository repository;


        ApplicationContext context = new ClassPathXmlApplicationContext("beans1.xml"); 
        repository = context.getBean(UserRepository.class);


        Iterable usrs = repository.findByName("shahzad");

}

数据库中有一个名为 name 的列,我有多个记录,其值为 shahzad,我希望所有这些记录都将返回,但此函数不返回任何记录,没有返回记录

沙赫扎德

【问题讨论】:

  • 坦率地说,你真的需要回归基础,学习 Spring 的基本概念:什么是上下文,什么是依赖注入等。从 Spring bean 重新创建一个新的上下文以然后从这个新上下文中查找存储库是完全错误的。

标签: spring spring-data-jpa data-access


【解决方案1】:
    ApplicationContext context = new ClassPathXmlApplicationContext("beans1.xml"); 
    repository = context.getBean(UserRepository.class);

您正在为每个请求创建一个新的上下文,这是一个非常错误的策略。

作为第一次更正,不要在你的控制器中创建一个新的上下文,你应该使用依赖注入。

@Autorwired
private UserRepository userRepository; 
@RequestMapping(value = "/jpadata1", method = RequestMethod.GET)
 public String jpadata1(ModelMap map) {        
    Iterable usrs = userRepository.findByName("shahzad");
}

【讨论】:

  • 是的,谢谢你的建议,春天的新手,这就是我发现我正在用 ApplicationContext 做一件可怕的事情并通过基础知识。谢谢大家指出这一点。但是你能回答我原来的问题为什么我没有得到记录吗?
  • 可能有很多原因,也许你想在github上发布你的项目?
【解决方案2】:

转到 JPA_Users 类,如果您使用 eclipse 作为 ide,然后键入 outline 并检查 getter 值是什么 用于字段 name/Name 您在 pojo 类中拥有的内容。

在 Repository 层也试试下面的注释:

org.springframework.transaction.annotation.Transactional
@Transactional

同时检查你的 pojo 类 primary id 是否属于 Long 类型。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2023-03-26
    • 2013-11-29
    • 1970-01-01
    • 2016-12-05
    • 2011-01-02
    • 2011-06-22
    相关资源
    最近更新 更多