标签: spring-data

Spring数据存储库:列表与流

何时定义方法list以及stream在 Spring 数据存储库中定义什么建议?

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-streaming

例子:

interface UserRepository extends Repository<User, Long> {

  List<User> findAllByLastName(String lastName);

  Stream<User> streamAllByFirstName(String firstName);                    
         
  // Other methods defined.
}
Run Code Online (Sandbox Code Playgroud)

请注意,这里我不是在询问PageSlice - 它们对我来说很清楚,并且我在文档中找到了它们的描述。


我的假设(我错了吗?):

  1. Stream 不会将所有记录加载到 Java 堆中。相反,它将k记录加载到堆中并一一处理它们;然后它加载另一个k记录等等。

  2. List 会立即将所有记录加载到 Java 堆中。

  3. 如果我需要一些后台批处理作业(例如计算分析),我可以使用流操作,因为我不会立即将所有记录加载到堆中。

  4. 如果我需要返回包含所有记录的 REST 响应,我无论如何都需要将它们加载到 RAM 中并将它们序列化为 JSON。在这种情况下,立即加载列表是有意义的。


我看到一些开发人员在返回响应之前将流收集到列表中。

class UserController {

    public ResponseEntity<List<User>> getUsers() {
        return new ResponseEntity(
                repository.streamByFirstName()
                        // OK, for mapper - it is nice syntactic sugar. 
                        // Let's imagine there …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data

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

如何检索给定域类的spring数据存储库实例?

给出某些类中所有spring数据存储库的列表Bar:

@Autowired
private List<Repository> repositories;
Run Code Online (Sandbox Code Playgroud)

如何Foo在上面的列表中找到现有域类的存储库?

假设存在以下内容:

@Entity
public class Foo {
  ...
}
Run Code Online (Sandbox Code Playgroud)

public interface FooRepository extends JpaRepository<Foo, String> {}
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

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

使用自定义UserDetailsS​​ervice进行Spring Boot

将自定义的UserDetailsS​​ervice实现(使用Spring Data JPA)添加到Spring Boot应用程序的正确方法是什么?

public class DatabaseUserDetailsService implements UserDetailsService {

    @Inject
    private UserAccountService userAccountService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userAccountService.getUserByEmail(username);
        return new MyUserDetails(user);
    }

}


public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {

    public User findByEmail(String email);

}



@Service
public class UserAccountService {

    @Inject
    protected UserRepository userRepository;

    public User getUserByEmail(String email) {
        return userRepository.findByEmail(email);
    }

}


@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.sample")
@EntityScan(basePackages = { "com.sample" })
@EnableJpaAuditing(auditorAwareRef = "auditorProvider") …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security spring-data spring-boot

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

更改Spring Data findAll()方法的默认排序顺序

我正在使用Spring Data JPA,我想知道是否可以更改Spring Data findAll()方法使用的实体的默认排序顺序?

spring jpa spring-data spring-data-jpa

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

为什么摘录投影不会自动应用于Spring Data REST项目资源?

我做了一个应该暴露嵌套实体的投影:

@Projection(name = "inlineBusiness", types = { UserModel.class })
public interface InlineBusinessUserModelProjection {

    String getUsername();

    String getFirstName();

    String getLastName();

    Date getBirthdate();

    String getEmail();

    BusinessModel getBusiness();
}
Run Code Online (Sandbox Code Playgroud)

和服务存储库:

@RepositoryRestResource(collectionResourceRel = "users", path = "users",
       excerptProjection = InlineBusinessUserModelProjection.class)
public interface UserRepository extends BaseDAO<UserModel> {..}
Run Code Online (Sandbox Code Playgroud)

因为/users它工作正常,业务领域暴露与嵌套实体,但当我调用/users/1- 没有,也所有自定义方法..似乎投影不参与任何方法除了/users 任何想法?

spring spring-mvc spring-data spring-data-rest

18
推荐指数
1
解决办法
9478
查看次数

JpaRepository与CRUDRepository findAll

我有一个简单的问题:为什么JpaRepository返回实体列表但CrudRepository返回Iterable实体?

这是故意的吗?我想这是因为CrudRepository是更通用的接口,可能有一些特定的存储库返回Iterable.

在不使用特定的JpaRepository的情况下使用CrudRepository会更加困难.

谢谢

spring-data spring-data-jpa

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

QuerydslPredicate和泛型类

我有很多控制器使用相同的方法,差异只是实体类.

我想创建通用的BaseController并且QuerydslPredicate注释有问题(不能设置root,这是通用的)

class abstract BaseController<T extends BaseEntity> {
   @Autowired
   private Repository<T, Long> repository;

   @RequestMapping(method = RequestMethod.GET)
   public Page<T> findAll(@QuerydslPredicate Predicate predicate, Pageable pageable) {
      return repository.findAll(predicate, pageable);
   }
}
Run Code Online (Sandbox Code Playgroud)

Method extractTypeInfo from QuerydslPredicateArgumentResolver return T.但是需要Entity类.

我无法将根值设置为QuerydslPredicate(没有类)

@QuerydslPredicate(root = T.class)
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一目标的任何帮助?

java generic-collections querydsl spring-data

18
推荐指数
1
解决办法
786
查看次数

Spring应用程序上下文模式出错

我在Eclipse中有一个maven-spring项目,我在我的一个spring语境中有这个烦人的错误信息:

引用文件包含错误(jar:file:/M2_HOME/repository/org/springframework/spring-beans/3.1.2.RELEASE/spring-beans-3.1.2.RELEASE.jar!/ org/springframework/beans/factory/xml /spring-tool-3.1.xsd).有关更多信息,请右键单击"问题视图"中的消息,然后选择"显示详细信息..."

演出的秘密导致了这个:

在此输入图像描述

我使用spring-data-jpa 1.2.0.RELEASE,其余的春季罐子是3.1.3.RELEASE.关于spring-data-commons-core - 我甚至没有依赖于我的pom中的这个jar,但我可以在我的m2存储库中看到它以及spring-data-commons-parent和版本1.4.0.RELEASE ,我不知道为什么(也许那些是spring-data-jpa的一部分?).

我的应用上下文架构:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
   http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.2.xsd">
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我一直收到这个错误.基本上它没有任何影响,应用程序编译,部署和运行就好了,这只是Eclipse中令人讨厌的红色错误标记让我疯狂:)

spring xsd spring-data

17
推荐指数
5
解决办法
8万
查看次数

在Spring Data MongoDB中有所不同

有没有人试图distinct在他们的查询中使用Spring Data for Mongo.如果你有一个例子,请发表它.我应该在哪里以及如何包括distinct flag

链接到Spring Data Mongo示例 -Example 4.4. Query creation from method names

// Enables the distinct flag for the query
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
Run Code Online (Sandbox Code Playgroud)

mongodb spring-data

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

我们如何使用spring boot为mongodb创建自动生成的字段

我写了一些代码.我想把BaseQuestionClass中的questionId字段设为Autogenerated.Any解决方案呢?我没有使用jpa jar.so我不能使用@Generatedvalue注释.所以我们如何在这里显示这个字段是自动生成的.代码如下.

的pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>audit_project</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

BaseQuestion.java …

mongodb spring-data spring-data-mongodb spring-boot

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