gpt4 book ai didi

spring-data mongodb 自定义实现 PropertyReferenceException

转载 作者:IT老高 更新时间:2023-10-28 13:58:32 25 4
gpt4 key购买 nike

我正在尝试根据引用 4.4 自定义实现来实现自定义查询:

http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/repositories.html

What's the difference between Spring Data's MongoTemplate and MongoRepository?

我这样做是因为我需要使用 mongoTemplate 进行特殊查询。

我得到的错误是 PropertyReferenceException。所以似乎 spring-data 正在尝试自动生成我不想要的查询。我想使用我自己的自定义查询。

org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User

这里也描述了该问题,但该解决方案似乎对我不起作用:

http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality

问题

如何在没有 spring-data 尝试自动生成查询的情况下实现我的自定义查询接口(interface)和实现?

配置

Spring 配置

spring-data.xml

<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />

Repository 类和接口(interface)位于以下包中:

com.eerra.core.common.service.UserRepositoryInterface.javacom.eerra.core.common.service.UserRepoistoryCustom.java(接口(interface))com.eerra.core.common.service.UserRepositoryCustomImpl.java(实现)

UserRepositoryCustom.java

public interface UserRepositoryCustom {
List<User> searchAllUsers();
}

UserRepositoryCustomImpl.java

public class UserRepositoryCustomImpl implements UserRepositoryCustom {

@Autowired
private MongoTemplate mongoTemplate;

@Override
public List<User> searchAllUsers() {
return mongoTemplate.findAll(User.class);
}
}

UserRepositoryInterface.java

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String>, UserRepositoryCustom {
User findByEmail(String email);
List<User> findByEmailLike(String email);
List<User> findByEmailOrLastName(String email, String lastName);
List<User> findByEmailOrFirstNameLike(String email, String firstName);

@Query("{\"$or\" : [ { \"email\" : { \"$regex\" : ?0, \"$options\" : \"i\"}} , " +
"{ \"firstName\" : { \"$regex\" : ?0, \"$options\" : \"i\"}}, " +
"{ \"lastName\" : { \"$regex\" : ?0, \"$options\" : \"i\"}}]}")
List<User> findByEmailOrFirstNameOrLastNameLike(String searchText);
}

最佳答案

问题解决了。当 Impl 类命名不正确时会出现此错误。 Impl 类必须根据存储库类命名。因此,此示例的名称必须如下:

  • com.eerra.core.common.service.UserRepositoryInterface.java(主存储库)
  • com.eerra.core.common.service.UserRepositoryInterfaceImpl.java(自定义存储库方法的实现)
  • com.eerra.core.common.service.UserRepositoryInterfaceCustom.java(与自定义方法的接口(interface))

在此处查看答案: What's the difference between Spring Data's MongoTemplate and MongoRepository?

关于spring-data mongodb 自定义实现 PropertyReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035419/

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