相关疑难解决方法(0)

尝试使用Spring Data JPA创建自定义存储库时,找不到类型错误的属性

我有一个Media实体,它有一些用户上传文件的基本字段.为了保存上传文件的字节,我想创建一个包含该功能的自定义存储库.按照Spring文档中的步骤,我创建了一个如下所示的界面:

public interface MediaBytesRepository
{
    public byte[] getBytes(Media media) throws IOException;
    public void saveBytes(Media media, byte[] bytes) throws IOException;
    public void appendBytes(Media media, byte[] bytes) throws IOException;
    public void deleteBytes(Media media) throws IOException;
    public boolean bytesExist(Media media) throws IOException;
}
Run Code Online (Sandbox Code Playgroud)

然后我提供了一个名为的接口的实现 MediaBytesRepositoryImpl

有了这个,我创建了以下界面:

public interface MediaRepository extends JpaRepository<Media, Long>, MediaBytesRepository
{
}
Run Code Online (Sandbox Code Playgroud)

现在,当我启动服务器时,我得到以下堆栈跟踪:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaRepository': FactoryBean threw exception on object creation; …
Run Code Online (Sandbox Code Playgroud)

java spring repository spring-data-jpa

39
推荐指数
2
解决办法
4万
查看次数

spring-data mongodb自定义实现PropertyReferenceException

我正在尝试根据参考4.4自定义实现实现自定义查询:

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

Spring Data的MongoTemplate和MongoRepository有什么区别?

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

我得到的错误是一个PropertyReferenceException.所以spring-data似乎试图自动生成我不想要的查询.我想使用自己的自定义查询.

org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
Run Code Online (Sandbox Code Playgroud)

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

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

如果没有spring-data尝试自动生成查询,如何实现自定义查询接口和实现?

组态

弹簧配置

弹簧data.xml中

<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
Run Code Online (Sandbox Code Playgroud)

存储库类和接口位于以下包中:

com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepoistoryCustom.java(interface)com.eerra.core.common.service.UserRepositoryCustomImpl.java(implementation)

UserRepositoryCustom.java

public interface UserRepositoryCustom {
    List<User> searchAllUsers();
}
Run Code Online (Sandbox Code Playgroud)

UserRepositoryCustomImpl.java

public class UserRepositoryCustomImpl implements UserRepositoryCustom {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<User> searchAllUsers() {
        return mongoTemplate.findAll(User.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

UserRepositoryInterface.java

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String>, UserRepositoryCustom {
    User findByEmail(String email);
    List<User> findByEmailLike(String email);
    List<User> findByEmailOrLastName(String …
Run Code Online (Sandbox Code Playgroud)

spring spring-data spring-data-mongodb

12
推荐指数
1
解决办法
1万
查看次数

如何在 Spring Data 中进行 Mongo 聚合查询?

这是我第一次在 Java 中使用 Mongo,我在这个聚合查询中遇到了一些问题。我可以在 Mongo for Spring 中做一些简单的查询,并@Query在我的 Repository 接口中添加注释,它扩展了MongoRepository<T, ID>. 了解在 Spring-Data 中进行长聚合时采用哪种方法会很有帮助。

db.post.aggregate([
    {
      $match: {}
    },
    {
      $lookup: {
        from: "users",
        localField: "postedBy",
        foreignField: "_id",
        as: "user"
      }
    },
    {
      $group: {
        _id: {
          username: "$user.name",
          title: "$title",
          description: "$description",
          upvotes: { $size: "$upvotesBy" },
          upvotesBy: "$upvotesBy",
          isUpvoted: { $in: [req.query.userId, "$upvotesBy"] },
          isPinned: {
            $cond: {
              if: { $gte: [{ $size: "$upvotesBy" }, 3] },
              then: true,
              else: false
            }
          },
          file: …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data spring-data-mongodb

10
推荐指数
2
解决办法
2万
查看次数

Spring Data - 如何编写 MongoRepository 方法进行 findAndModify 操作?

我使用了 MongoTemplate 的 findAndModify 方法,如下所示,

 public Organization findAndModifyOrganization(Integer orgId, String name, Integer empId)
{
    Query query = new Query();
    query.addCriteria(Criteria.where("employees.id").is(empId));
    query.addCriteria(Criteria.where("id").is(orgId));

    Update update = new Update();
    update.set("employees.$.name", name);
    Organization org = mongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Organization.class);

    return org;
} 
Run Code Online (Sandbox Code Playgroud)

//类结构

@Document
public class Organization {
    private Integer id;
    private List<Employee> employees;
}

@Document
public class Employee {
    private Integer id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

我想使用 Spring Data MongoRepository 方法来实现上述目标。请告诉我如何使用 MongoRepository 方法更新员工姓名。

mongodb spring-data mongodb-query

5
推荐指数
1
解决办法
3323
查看次数

MongoTemplate 与 MongoOperations 使用哪个

在我的项目中,我们使用的是 Spring 注入的 MongoTemplate

private final MongoTemplate mongoTemplate;
Run Code Online (Sandbox Code Playgroud)

我知道 mongo 模板实现了 MongoOperations、ApplicationContextAware,所以我们通过模板获得了上下文感知方法,如果我使用如下所示的 mongo 操作类型对象,我们就不会得到这种方法(spring 将在其中注入 mongo 模板对象)

private final MongoOperations mongoOperations;
Run Code Online (Sandbox Code Playgroud)

我的疑问是 1. 我们这样做是否违反了“编程接口”范式 2. 我们应该使用哪种模式,为什么?

spring-data-mongodb

5
推荐指数
0
解决办法
3429
查看次数

spring data mongodb,使用MongoRepository还是MongoTemplate?

如果使用MongoRepository,您可以拥有以下代码:

@Repository
public interface UserRepo extends MongoRepository<User, String> {

    // additional methods go here 

} 
Run Code Online (Sandbox Code Playgroud)

然后你做userRepo.save()find()等来做CRUD操作.

或者你只是MongoTemplate并做CRUD操作.

我的问题是哪个更受欢迎?每种方法的优缺点是什么?谢谢!

spring mongodb spring-data

3
推荐指数
1
解决办法
3299
查看次数