【问题标题】:How to write custom query in Mongo Spring Data JPA如何在 Mongo Spring Data JPA 中编写自定义查询
【发布时间】:2013-12-09 16:24:49
【问题描述】:
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;   

 @Repository    
    public interface PersonRepository extends MongoRepository<Person, String> {

            @Query("{ 'firstname' : ?0 }")
            List<Person> findByFirstname(String firstname);

        }

我在 MongoDB 中使用 spring data jpa。我可以使用存储库保存、删除或检索(所有记录)。

我正在尝试根据属性值检索记录。 (如上所示的自定义查询)。这不起作用。

有人可以帮助我了解如何在 MongoRepository 中编写自定义查询,我可以在其中传递列值并获取匹配的行。

编辑:

添加代码。

@Document/*(collection = "person")*/
public class Person {

    @Id
    private String id;

    private String firstName;

    private String lastName;

    private Address address;
          // gettters and setters
}

@Service
public class PersonServiceImpl{

          @Autowired
    private PersonRepository personRepository;

          public Person findPersonByFirstName(String firstName) {

        List<Person> person = personRepository.findAllByFirstName(firstName);

        System.out.println("** Data Retrieved **" );

        return person.get(0);
    }
}

【问题讨论】:

    标签: spring repository spring-data spring-data-jpa spring-mongo


    【解决方案1】:

    这种查询不需要自定义查询。

    以下应该可以正常工作(假设您在 Person 类中的字段是“名字” - 对吗?)

    List<Person> findAllByFirstname(String firstname);
    

    您的查询是否可以通过 mongo 控制台进行?

    【讨论】:

    • 我在尝试您的代码时遇到此异常。原因:java.lang.AbstractMethodError: org.springframework.data.repository.query.Parameters.createFrom(Ljava/util/List;)Lorg/ springframework/数据/存储库/查询/参数;在 org.springframework.data.repository.query.Parameters.getBindableParameters(Parameters.java:234) 在 org.springframework.data.repository.query.Parameters.assertEitherAllParamAnnotatedOrNone(Parameters.java:261) 在 org.springframework.data.repository .query.Parameters.(Parameters.java:84)
    • 似乎适用于 MongoRepository,因为属性存储在“键”:“值”对中,它的工作方式与 Spring Data JPA 与其他数据库的工作方式不同。是的,此查询在控制台数据库中工作。 person.find({"firstName":"Rakesh"})
    • 试试 findAllByFirstName。查询区分大小写。您的自定义查询也是如此。
    • 试过了.. 没有运气。这是我设置的链接。 docs.spring.io/spring-data/data-mongodb/docs/1.0.0.M5/reference/…
    • 请提供您的班级人员的代码和调用存储库的代码,并确保您使用的是正确包中的对象(例如,查询必须来自 org.springframework.data.mongodb.repository )
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2015-12-07
    • 2015-03-25
    • 2012-09-13
    • 2019-03-10
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多