问题标签 [spring-boot-jpa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - Spring Boot JPA 多租户 HikariCP 池快速运行满
我有一个 Spring Boot - JPA - Postgres 多租户设置,其中每个租户都在一个单独的模式中。直到今天,当我尝试创建超过 5 个租户时,一切都运行良好。不,我在启动时遇到了这个异常:
我的 Hikari CP 最大大小为 5。我在 DEBUG 日志中有 Hikari,日志说:
HikariPool-1 - Pool stats (total=5, active=5, idle=0, waiting=0)
据我了解,Hikari 无法释放到不同模式的连接,所以我最终遇到了这个错误。
我的多租户连接提供商是这样的:
如果我将调试器设置为 on releaseConnection
,它永远不会去那里。它去了一次,releaseAnyConnection
但实际上并没有将连接从活动连接中移开。
所以现在我被困在这里,有点不知道如何继续前进。
如果我向每个租户提出了至少一个请求,则会发生此异常。问题是,当我的应用程序启动时,它会从配置模式中查询所有租户模式名称,然后针对所有这些模式(在循环中)执行 Liquibase 脚本,以确保所有租户模式都是最新的。因此,在启动后,如果我的租户数量多于连接池允许的最大连接数,我肯定会面临这种异常情况。我可以从这个应用程序中删除模式更新,但我仍然希望有数百个同时登录到我的应用程序的租户,所以迟早我仍然会遇到这个问题。通过谷歌搜索,我发现有些人遇到了这个问题,因为他们的查询运行了很长时间,但与多租户无关。
我的应用程序.yml:
Spring Boot 版本为 2.0.5.RELEASE 和 Hikari 2.7.9
java - Spring JPA中的多对一关联不更新相关实体
我在使用多对一关联在数据库中插入 JPA 实体时遇到问题。
我在用着:
- Spring Boot 2.1.4.RELEASE
- Ecliselink 2.7.4.RC2 (org.eclipse.persistence.jpa)
- spring-boot-starter-数据-jpa
我正在使用 Spring 的存储库,其中只有一个保存方法,没有插入、合并或更新方法。
我使用DbWatchlist
与另一个实体具有多对一关联的实体DbWatchlistProvider
。
如果我创建一个新DBWatchlist
的填充字段,DbWatchlistProvider
一切正常。此外,如果我更改现有的DbWatchlist
以及此处的字段DbWatchlistProvider
并进行保存,则一切正常。
但是,如果我尝试DbWatchlist
使用现有DbWatchlistProvider
JPA 创建一个新的,总是会尝试为DbWatchlistProvider
.
我尝试DbWatchlistProvider
在插入实体之前从数据库中读取数据,然后DbWatchlist
进行保存,但这里也完成了 INSERT。这会导致异常:
我的代码:
在我的测试中,我尝试了以下方法:
直到最后一次保存,一切都正常工作,没有错误,就像预期的那样。有人知道问题出在哪里,为什么DbWatchlistProvider
试图插入而不更新?
例外是:
mysql - 我们可以使用 JPA Repository 从 Mysql View 中提取/获取数据吗?如果是怎么办?
我有很多表,我使用 JPARepository 从中获取数据。然后我在 MySql - View 上创建并尝试使用 JPARepository 来做 findAll 但它不起作用。
spring-boot - 如何在一个 MVC 应用程序中结合 @DataJpaTest @SpringBootTest 来测试每一层?
这里https://stackoverflow.com/a/52968130/10894456 很好地解释了为什么 @DataJpaTest @SpringBootTest 不应该混合在一个应用程序中。
但是当无论如何都需要测试 MVC SpringBoot 应用程序的每一层时,几乎没有解释这种情况(从我的角度来看,很自然地不仅要测试一个层或仅测试另一层,而且还要测试两个甚至所有层,不是吗?)
所以有人建议使用@AutoConfigureTestDatabase 而不是@DataJpaTest 但没有完成工作(((
所以我的问题是:使用@AutoConfigureTestDatabase 是一个合适的解决方案吗?如果是,请详细说明。如果没有,请提出更合适的解决方案,谢谢
java - Spring CrudRepository 保存方法的自定义返回类型(动态投影)
我想知道是否可以为 Spring 的CrudRepository
save 方法定义自定义返回类型,如下面的 find 查询方法示例:
在文档中,我只找到了一个使用查询方法进行动态投影的示例。
我试过了
但我收到以下错误:
任何想法如何让这个工作?
java - 来自 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 中进行操作的文章: Java 8 JPA 存储库在 Postgresql 中逐行流式传输
我有这样的存储库:
比我这样使用流:
为了使示例更简单,'export' 方法是完全空的。
当我调用该方法时,我看到了 Hibernate 查询
一段时间后,我有 OutOfMemoryError。查询提示没有帮助。
如何使用 Spring Boot 存储库(甚至 EntityManager)读取数据并以最佳方式从 DB 加载行。我知道我可以进行分页,但正如文章中所写的那样,这不是最理想的方式。
spring-data - spring-data-geode 的 spring-boot-starter-data-jpa 兼容版本是什么?
有人可以帮我在 Spring Boot 版本中找到兼容的spring-boot-starter-data-jpa
for版本吗?spring-data-geode
2.1.4.RELEASE
这适用于运行嵌入式缓存服务器的应用程序,该应用程序具有使用 HikariCP 连接到 Oracle RDBMS 的后写实现。
我尝试使用从低到低的spring-boot-starter-data-jpa
版本运行我的应用程序,但没有成功。我也尝试过低至for 的版本。2.1.4.RELEASE
2.0.8.RELEASE
2.1.4.RELEASE
2.0.8.RELEASE
spring-data-commons
异常堆栈跟踪:
java - 用于聚合值的 Spring Boot jpa 查询构建器?
我想创建输出聚合值的可定制查询。我知道三种获取和执行查询的方法,但似乎都不够。我要构建的查询如下所示:
tldr:跳过 1 和 2。
- SQL 作为字符串
private NamedParameterJdbcTemplate template; template.query("select ..." , new MapSqlParameterSource("...", "...") , rs -> {...rs.getString("minprice")...
- 优点:我们可以从查询中访问结果
- 缺点:它没有使用查询构建器:我们必须自己构建“选择...”字符串。
- 使用存储库
public interface MytableRepository extends CrudRepository<Mytable, Integer> { @Query("Select ...") public List<Object[]> findMinMaxPrice(@Param("myParam") String myParam);
- Pro:我们可以访问查询的结果。
- 缺点:查询是硬编码的
- 使用查询生成器
Specification<MyTable> spec = Specifications.<>where((mytable, query, cb) -> { Predicate sql = cb.equal(mytable.get("k"), "v"; return sql; } List<Mytable> result = myJpaSpecificationExecutor.findall(spec);
- Pro:它正在使用查询生成器
- 缺点:查询未使用 groupBy。由于我们的 groupBy 查询不是返回类记录
Mytable
而是聚合值,所以我不知道如何使这项工作。我开始选择 fromMytable
所以我认为我需要将它用作类型参数 toSpecification
,但这立即意味着结果也应该是 typeMyTable
,不是吗?
如何使用具有灵活结果类型的查询生成器?
spring-boot-jpa - 如何将地图集合作为 jpa 查询返回
我有个问题。当我使用 spring data jpa 时,我希望它返回 Map Collections,但它错了。然后我在互联网上搜索找到了解决方案。流动。
但我不认为使用新地图方法是最好的解决方案,我想问一下是否有其他解决方案。谢谢。
java - Spring JPA 复合 PK 与一个自动递增
我正在尝试使用 Spring Boot 2.1.2.RELEASE + JPA(使用启动器)和 MySQL(InnoDB)来持久化具有复合主键的实体,其中一个应该自动递增。我有一个带有 2 个非抽象子类的抽象类,并且我正在使用单表策略进行继承。
我一直在寻找如何实现这一目标,但每篇似乎都在寻找与我相同的帖子最终都没有答案(示例)。
我当前的设置看起来像这样(为清楚起见,省略了 setter、getter 和构造函数)。
我发现的第一个问题是表生成。如果声明如下,MySQL 允许创建 PK
但不是以不同的顺序
创建表时,Hibernate 使用第二个,因此失败。还尝试更改字段顺序但无济于事。我认为这可能是 Hibernate 的一个问题,但我不确定。任何人都可以确认吗?无论如何,我通过手动创建 DDL 脚本并通过 Hibernate 禁用自动 DDL 解决了这个问题。
下一个问题,我没有找到答案,实体在表中正确保存,但是存储库的save方法返回的id始终为0。我在保存之前手动设置pk2,而离开pk1由数据库完成。
在调试时,我发现了这个isNew() 方法。事实证明它返回 false 因为 MyEntityPK 与 null 不同(我设置了 pk2)。这当然不是我所期望的,因为我实际上是在保存一个新实体,因为我的 PK 是复合的并且我将一个字段留空。所以,我也认为这可能是一个错误。有一些类覆盖了 isNew() 方法,但似乎它们没有被使用。
我做错了什么还是这是一个错误?帮助表示赞赏:)