问题标签 [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.
java - 建议一个 JPA 单元测试框架
如何对 JPA 代码进行单元测试?有没有办法自己生成单元测试用例?
注意:我很懒,对单元测试代码很陌生。
java - JPA 的单元测试用例值得吗?无论如何它只是要访问数据库,我们为什么需要它?
JPA 的单元测试用例值得吗?无论如何它只是要访问数据库,我们为什么需要它?
java - 是否有充分的理由使用 XML 而不是通过注释来配置休眠?
我已经使用 Hibernate 几年了,但只将它与注释一起使用,并在我的代码中设置连接参数。
我是否因为不使用 XML 文件而“遗漏了一些东西”?是否有仅在 XML 中可用的重要功能?是否存在使用 XML 有意义的情况或模式?
java - JPA / Hibernate / PG的映射问题
我有两个实体,Entity1 和 Entity2,是一对多的关系。在 Entity1 上,我有一个包含条目的地图。
我用来在地图上保留一个带有一些 Entity2 的新 Entity1 的代码是这样的:
这是实体的摘录:
这似乎工作正常,因为它在 pg 数据库上插入两个实体,但问题是它没有在数据库上创建 - 保存 e2 的 MapKey(理论上 JPA 生成这个密钥),所以当我得到 e1 回来时,我尝试从中获取 e2s 地图,我有一个:
javax.ejb.EJBException:org.hibernate.HibernateException:集合的空索引列:
我怎样才能得到这个 MapKey 保存?
注意:我正在使用带有 JPA/Hibernate 的 JavaEE,在 JBoss 4.2 上运行,带有 PGSQL DB。
java - JPA 未生成“在删除集为空时”FK 限制
我有两个相关的类 JPA 注释。警报和状态。一个警报可以有一个状态。
我需要的是能够删除一个状态并将空值“传播”到已删除的状态中的警报。
也就是说,我需要将外键定义为“ on delete set null ”。
例子:
前:
之后(删除id=2的状态)
我正在使用 Hibernate 和 PostgreSQL,从源代码自动生成数据库。我已经尝试了所有可能的 CascadeType 都没有成功。
代码有什么问题吗?可以用 JPA 做到这一点吗?
java - JPA 急切未加入
JPA 的 fetch 策略究竟控制什么?我无法发现急切和懒惰之间的任何区别。在这两种情况下,JPA/Hibernate 都不会自动加入多对一关系。
示例:人员只有一个地址。一个地址可以属于很多人。JPA 带注释的实体类如下所示:
如果我使用 JPA 查询:
JPA/Hibernate 生成一个 SQL 查询以从 Person 表中进行选择,然后为每个人生成一个不同的地址查询:
这对于大型结果集非常不利。如果有 1000 人,它会生成 1001 个查询(1 个来自 Person,1000 个来自 Address)。我知道这一点是因为我正在查看 MySQL 的查询日志。我的理解是,将地址的获取类型设置为 eager 会导致 JPA/Hibernate 自动使用连接进行查询。但是,无论获取类型如何,它仍然会为关系生成不同的查询。
只有当我明确告诉它加入时,它才会真正加入:
我在这里错过了什么吗?我现在必须手动编写每个查询的代码,以便它离开多对一关系。我在 MySQL 中使用 Hibernate 的 JPA 实现。
编辑:它似乎不影响 JPA 查询(参见 Hibernate FAQ here和here) 。FetchType
所以就我而言,我已经明确告诉它加入。
hibernate - JPA 和 Hibernate 如何管理序列?
我在我的项目中使用 Hibernate,我的许多实体都使用序列作为他们的技术密钥。例如:
当这个类的新对象被持久化时,我有两个关于 Hibernate 生成的 ID 的问题:
- 为什么 SequenceGenerator(来自 javax.persistence)的默认值 allocationSize 设置为 50 而不是 1?那有什么利益呢?
- Hibernate 用于计算生成的 ID 的默认算法是什么?似乎 Hibernate 使用了由我的 Oracle 数据库托管的序列返回的值,但是在将其分配给我的实体之前对其进行了修改......
java - JPA/Hibernate 最大连接数?
JPA/Hibernate 查询中允许的连接数是否有限制?
由于 Hibernate不会自动加入,因此我必须在 JPA/Hibernate 查询中明确指定联接。例如,人有地址,地址有状态。以下查询检索地址和状态已满载的人员:
随着我不断添加连接,我最终(在 12-13 个左连接之后)达到了 Hibernate 生成无效 SQL 的限制:
我确实为我的数据库实现 MySQL 设置了 Hibernate 的方言:
Hibernate 在单个查询中可以处理的连接数是否有限制?
编辑1:日志文件中包含以下内容:
但是,something69_2_
不会出现在 SQL 查询中。这就像 Hibernate 生成了一个 SQL 查询并期望something69_2_
在结果中,但事实并非如此。
编辑 2:类似问题记录为未修复的Hibernate 错误 HHH-3035
编辑 3:这是一个记录在案的Hibernate 错误 HHH-3636,已修复但尚未包含在任何版本中。
编辑 4:我构建了 hibernate-core 3.3.2-SNAPSHOT,其中包括错误修复 HHH-3636,但它没有解决这个问题。
编辑 5:错误行为似乎是由LEFT JOIN FETCH
ManyToMany 或 OneToMany 关系上的多个触发的。一个会起作用,两个或三个会导致错误。
编辑 6:这是堆栈跟踪:
编辑 7:所有这些连接的原因是为了避免 Hibernate 执行 n+1 查询,请参阅Hibernate FAQ 关于如何在运行 Hibernate 查询时避免 n+1 SQL SELECT 查询?
java - Hibernate 相当于 EclipseLink 的批量查询提示?
我喜欢EclipseLink的一件事是有一个很棒的东西,称为批处理查询提示,我还没有找到与之对应的 Hibernate。
基本上,做一大堆连接会很快变得一团糟,你最终查询的数据比你想要的要多(请记住,如果你将人员连接到 6 个地址,则人员信息将返回 6 次;现在继续将其乘以额外的连接) .
想象一个 Person 实体,它具有 0:M 的 Address、Email、Phone 和 OrderHistory 集合。加入所有不好但使用批处理方法:
这将对 Person 表进行查询,仅此而已。当您第一次访问地址记录时,它将对整个地址表进行一次查询。如果您在 Person 表上指定了 where 子句,则同样的条件也将用于 Address 加载。
所以不是做 1 个查询,而是做 5 个。
如果您使用连接来执行此操作,您可能会在一个查询中获得所有信息,但由于连接,您很可能会加载更多数据。
无论如何,我已经在 Hibernate 文档中寻找与此等效的文档,但没有看到。有吗?
hibernate - 休眠每日构建
我可以下载 Hibernate 的每日版本吗?我需要最新版本来修复不在已发布版本中的错误。我目前正在尝试构建最新版本,但遇到各种测试用例失败。如果有我只是下载和使用的每日构建,如果会更快。