何时定义方法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)
请注意,这里我不是在询问Page、Slice - 它们对我来说很清楚,并且我在文档中找到了它们的描述。
我的假设(我错了吗?):
Stream 不会将所有记录加载到 Java 堆中。相反,它将k记录加载到堆中并一一处理它们;然后它加载另一个k记录等等。
List 会立即将所有记录加载到 Java 堆中。
如果我需要一些后台批处理作业(例如计算分析),我可以使用流操作,因为我不会立即将所有记录加载到堆中。
如果我需要返回包含所有记录的 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) 给出某些类中所有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) 将自定义的UserDetailsService实现(使用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) 我正在使用Spring Data JPA,我想知道是否可以更改Spring Data findAll()方法使用的实体的默认排序顺序?
我做了一个应该暴露嵌套实体的投影:
@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
任何想法?
我有一个简单的问题:为什么JpaRepository返回实体列表但CrudRepository返回Iterable实体?
这是故意的吗?我想这是因为CrudRepository是更通用的接口,可能有一些特定的存储库返回Iterable.
在不使用特定的JpaRepository的情况下使用CrudRepository会更加困难.
谢谢
我有很多控制器使用相同的方法,差异只是实体类.
我想创建通用的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)
有关如何实现这一目标的任何帮助?
我在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中令人讨厌的红色错误标记让我疯狂:)
有没有人试图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) 我写了一些代码.我想把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 …
spring-data ×10
spring ×6
java ×4
jpa ×2
mongodb ×2
spring-boot ×2
querydsl ×1
spring-mvc ×1
xsd ×1