标签: spring-boot-jpa

来自 PostgreSQL 的流行(带提取大小)

我想从 PostgreSQL 11.2 流式传输结果,而不是一次将所有结果读取到内存中。我使用最新的稳定版 SpringBoot 2.1.4.RELEASE。

我阅读了如何在 MySQL 中执行此操作的文章。 http://knes1.github.io/blog/2015/2015-10-19-streaming-mysql-results-using-java8-streams-and-spring-data.html 我还阅读了如何在 PostgreSQL 中执行此操作的文章: Postgresql 中的 Java 8 JPA 存储库流逐行

我有这样的存储库:

public interface ProductRepository extends JpaRepository<Product, UUID> {
    @Query("SELECT p from Product p")
    @QueryHints(value = @QueryHint(name = HINT_FETCH_SIZE, value = "50"))
    Stream<Product> streamAll();
}
Run Code Online (Sandbox Code Playgroud)

比我这样使用流:

  productRepository.streamAll().forEach(product -> export(product));
Run Code Online (Sandbox Code Playgroud)

为了使示例更简单,'export' 方法完全为空。

当我调用该方法时,我看到 Hibernate 查询

Hibernate: select product0_.id as id1_0_, product0_.created as created2_0_, product0_.description as descript3_0_, product0_.name as name4_0_, product0_.product_type_id as product_5_0_ from products product0_ order by product0_.id
Run Code Online (Sandbox Code Playgroud)

一段时间后,我出现了 OutOfMemoryError。查询提示没有帮助。

如何使用 Spring Boot …

java postgresql jpa spring-boot spring-boot-jpa

7
推荐指数
1
解决办法
1982
查看次数

为什么 Hibernate 不批量插入用 @ElementCollection 注释的字段?

我有一个@Entity包含一些@OneToMany关系,但由于它们由 s 的集合组成Enum,所以我使用@ElementCollection. 该实体有一个在数据库级别 (MySQL) 生成的 ID。

这是我刚刚编写的一个小示例,它对应于我的实体的结构。

@Entity
public class Student {

  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @ElementCollection(targetClass = Language.class)
  @CollectionTable(name="student_languages", joinColumns=@JoinColumn(name="student_id"))
  private Set<Language> languages;

  @ElementCollection(targetClass = Module.class)
  @CollectionTable(name="student_modules", joinColumns=@JoinColumn(name="student_id"))
  private Set<Module> modules;

  @ElementCollection(targetClass = SeatPreference.class)
  @CollectionTable(name="student_seats", joinColumns=@JoinColumn(name="student_id"))
  private Set<SeatPreference> seatPreference;

[...]
}
Run Code Online (Sandbox Code Playgroud)

我知道这GenerationType.IDENTITY会停用批处理,但我认为这仅适用于主要实体,而不适用于单个属性。我必须批量导入一些实体(~20k),每个实体都有一些属性,但是 Hibernate 似乎为集合中的每个属性生成一个插入,使得导入速度慢得难以置信(每个实体需要 10 到 20 个插入)记录)。

我现在花了很长时间试图加快速度,以至于我正在考虑生成一个可以手动导入数据库的 SQL 文件。

有没有办法指示Hibernate批量插入字段@ElementCollection?难道我做错了什么?

java hibernate spring-boot spring-boot-jpa

7
推荐指数
1
解决办法
1173
查看次数

Spring CrudRepository save 方法的自定义返回类型(动态投影)

我想知道是否可以为 Spring 的CrudRepositorysave 方法定义自定义返回类型,就像下面的 find 查询方法示例一样:

    <T> Optional<T> findById(Long id, Class<T> type);
Run Code Online (Sandbox Code Playgroud)

在文档中,我只找到了带有查询方法的动态投影的示例。

我试过

    <T> T save(Foo entity, Class<T> type);
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

java.lang.IllegalArgumentException: Failed to create query for method public abstract java.lang.Object com.xyz.myproject.persistence.dao.FooDAO.save(com.xyz.myproject.persistence.model.Foo,java.lang.Class)! No property save found for type Foo!
Run Code Online (Sandbox Code Playgroud)

有什么想法如何让它发挥作用吗?

java spring spring-data-jpa spring-boot spring-boot-jpa

6
推荐指数
0
解决办法
1756
查看次数

如何在一个 MVC 应用程序中结合 @DataJpaTest @SpringBootTest 来测试每一层?

这里/sf/answers/3707769131/ 很好地解释了为什么 @DataJpaTest @SpringBootTest 不应该混合在一个应用程序中。

但是几乎没有解释无论如何都需要测试 MVC SpringBoot 应用程序的每一层的情况(从我的角度来看,很自然地不仅要测试一层或仅测试另一层,而且甚至测试所有层,不是吗?)

所以有人建议使用 @AutoConfigureTestDatabase 而不是 @DataJpaTest 的解决方案,但没有完成工作(((

所以我的问题是:使用@AutoConfigureTestDatabase 是一个合适的解决方案吗?如果是,请详细说明。如果不是,请提出更合适的解决方案,谢谢

spring-boot spring-boot-test spring-boot-jpa

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

如何使用 JPA 调用使用 MySQL 中的多个表的简单选择过程

我有一个从多个表返回结果的存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetProjectAndClientOverview`()
BEGIN
  SELECT ( SELECT count(*)  FROM projects_info) as "projects_done",
    (SELECT COUNT(*) FROM client_info) as "happy_clients",
    (SELECT count(*) FROM projects_info where category_id in(
select id from pme.projects_category
where category_name in 
("Commercial","Corporate","Hospitality")
))  as "real_professionals" ,
    (SELECT COUNT(*) FROM client_info) as "cups_of_coffee";
END
Run Code Online (Sandbox Code Playgroud)

我必须使用 JPA 在 SpringBoot 中调用此过程,请指导如何为此存储过程创建实体类、存储库、服务。

我尝试创建实体类但不确定它是否正确

 package com.panchmeru_studio.entities;
    
    import lombok.Data;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.NamedStoredProcedureQueries;
    import javax.persistence.NamedStoredProcedureQuery;
    
    @Data
    @Entity
   @NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(name = "getProjectAndClientOverview",
                                procedureName = "GetProjectAndClientOverview",
    resultClasses ={ ProjectsInfo.class ,ClientInfo.class})
})
    public class …
Run Code Online (Sandbox Code Playgroud)

jpa hibernate-mapping java-stored-procedures spring-boot-jpa

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

运行测试时面临“NoClassDefFoundError:org/springframework/data/repository/config/BootstrapMode”问题

这些是我的 pom.xml 文件中添加的与 spring 相关的 jar

<dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>2.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>2.0.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我看到的错误是:

<dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>2.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>2.0.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我尝试在 pom.xml 中更改 spring/jpa 等的不同版本,但问题仍然存在。

noclassdeffounderror maven spring-boot-jpa

2
推荐指数
1
解决办法
8114
查看次数