问题标签 [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.

0 投票
15 回答
76232 浏览

java - 从 JPA/EJB3 持久性上下文中分离实体

分离通过 EntityManager 获取的特定 JPA 实体 Bean 的最简单方法是什么。或者,我是否可以让查询首先返回分离的对象,以便它们基本上充当“只读”?

我想这样做的原因是因为我想修改 bean 中的数据 - 仅在我的应用程序中,但从来没有将它持久化到数据库中。在我的程序中,我最终必须在 EntityManager 上调用 flush(),这会将所有从附加实体的更改持久化到基础数据库,但我想排除特定对象。

0 投票
2 回答
10699 浏览

java - 在 JBoss 4.2 上使用 JPA 启用 Hibernate 二级缓存

在使用 Java Persistence API(注解实体)时,启用 Hibernate 的二级缓存需要哪些步骤?我如何检查它是否正常工作?我正在使用 JBoss 4.2.2.GA。

从 Hibernate 文档看来,我需要启用缓存并在persistence.xml中指定缓存提供程序,例如:

还需要什么?我需要向我的 JPA 实体添加@Cache注释吗?

如何判断缓存是否正常工作?我在运行查询后尝试访问缓存统计信息,但Statistics.getSecondLevelCacheStatistics返回 null,可能是因为我不知道要使用什么“区域”名称。

0 投票
2 回答
6749 浏览

java - 使用 JPA/Toplink 进行批量插入

我有一个通过 HTTP 接口接收消息的 Web 应用程序,例如:

该请求包含发件人的 ID、收件人的 ID 和消息的文本。

此消息应按如下方式处理:

  • 从数据库中查找源和目标的匹配用户对象
  • 创建对象树:包含消息文本字段的 Message 和用于源和目标的两个 User 对象
  • 将此树持久化到数据库中。

树将由我无法触及的其他应用程序加载。

我使用 Oracle 作为后备数据库,使用 JPA 和 Toplink 进行数据库处理任务。如果可能的话,我会留在这些地方。

如果没有太多优化,我可以在我的环境中实现约 30 个请求/秒的吞吐量。这并不多,我需要约 300 个请求/秒。所以我测量了性能瓶颈在哪里,发现调用em.persist()占用了大部分时间。如果我简单地注释掉该行,吞吐量将远远超过 1000 个请求/秒。

我尝试编写一个小型测试应用程序,它使用简单的 JDBC 调用将 100 万条消息持久保存到同一个数据库。我使用了批处理,这意味着我做了 100 次插入然后提交,并重复直到所有记录都在数据库中。在这种情况下,我测量了大约 500 个请求/秒的吞吐量,这可以满足我的需求。

很明显,我需要在这里优化插入性能。然而,正如我之前提到的,我想继续使用 JPA 和 Toplink,而不是纯粹的 JDBC。

你知道用 JPA 和 Toplink 创建批量插入的方法吗?您能否推荐任何其他技术来提高 JPA 持久性性能?

附加信息:

“请求/秒”在这里表示:请求总数/从测试开始到最后一条记录写入数据库的总时间。

我试图em.persist()通过在 servlet 内容和持久化程序之间创建一个内存队列来进行异步调用。对演出有很大帮助。然而,队列确实增长得非常快,因为应用程序将连续接收约 200 个请求/秒,这对我来说不是一个可接受的解决方案。

在这种分离的方法中,我收集了 100 毫秒的请求,并em.persist()在提交事务之前调用了所有收集的项目。EntityManagerFactory 在每个事务之间缓存。

0 投票
2 回答
9583 浏览

java - Java EE SqlResultSetMapping 语法

我有以下 Java 6 代码:

我在最后一个右括号上收到语法错误。Eclipse 给出:“插入 EnumBody 以完成块语句”和“插入枚举标识符以完成 EnumHeaderName”。来自 javac 的类似语法错误。

我究竟做错了什么?

0 投票
7 回答
54218 浏览

java - Hibernate(JPA)如何进行急切查询,加载所有子对象

关于我之前的问题,我想确保加载所有子对象,因为我有多个线程可能需要访问数据(从而避免延迟加载异常)。我知道这样做的方法是在查询(EJB QL)中使用“fetch”关键字。像这样:

假设一个模型有一个Order类,其中有一组OrderLines

我的问题是似乎需要“distinct”关键字,否则我似乎会得到一个Orderfor each OrderLine。我在做正确的事吗?

也许更重要的是,有没有办法拉入所有子对象,无论多深?我们有大约 10-15 个类,对于服务器,我们需要加载所有内容......我避免使用FetchType.EAGER,因为这意味着它总是渴望,特别是 Web 前端加载所有内容 - 但也许这是要走的路 - 是你做什么?我似乎记得我们之前尝试过这个然后得到非常慢的网页 - 但这也许意味着我们应该使用二级缓存?

0 投票
2 回答
21019 浏览

java - JPA 多事务管理器

我有一个 applicationContext.xml 文件,它在 Spring 中间件自定义应用程序中配置了两个 org.springframework.orm.jpa.JpaTransactionManager (每个都有自己的持久性单元,不同的数据库)。

我想使用基于注释的事务(@Transactional),而不是搞乱 TransactionStatus 提交、保存和回滚。

一位同事提到,当有多个事务管理器时,即使上下文文件设置正确(引用转到正确的持久性单元),这样做也会感到困惑。有人见过问题吗?


在您的配置中,您会有两个事务管理器吗?你会有 txManager1 和 txManager2 吗?

这就是我在 JPA 中所拥有的,两个不同的 Spring bean 是事务管理器。

0 投票
6 回答
15581 浏览

java - 在 Maven 测试期间未找到 persistence.xml

我正在尝试在 Maven 构建期间将测试数据加载到测试数据库中以进行集成测试。persistence.xml 被target/test-classes/META-INF/正确复制到,但是在运行测试时出现此异常。

javax.persistence.PersistenceException:没有名为目标数据库的 EntityManager 的持久性提供程序

看起来它没有找到或加载persistence.xml。

0 投票
2 回答
5151 浏览

java - JPA 实体、Oracle 10g 和日历类型属性是否存在问题?

在将 JPA 实体与 Oracle 10g 结合使用时,我遇到了以下非常烦人的行为。

假设您有以下实体。

该实体映射到 Oracle 10g,因此在 DB 中将有一个表T_ORDER,其中包含一个主键NUMBERID和一个TIMESTAMPactivationDate

假设我创建了一个带有激活日期的类的实例15. Sep 2008 00:00AM。我的本地时区是 CEST,即GMT+02:00. 当我持久化这个对象并T_ORDER使用 sqlplus 从表中选择数据时,我发现表中实际上14. Sep 2008 22:00是存储的,到目前为止还可以,因为 oracle db 时区是 GMT。

但现在令人讨厌的部分。当我将这个实体读回到我的 JAVA 程序中时,我发现 oracle 时区被忽略并且我得到14. Sep 2008 22:00 CEST,这绝对是错误的。

所以基本上,当写入数据库时​​,将使用时区信息,读取时将被忽略。

有什么解决方案吗?我猜最简单的解决方案是将 oracle dbs 时区设置为GMT+02,但不幸的是我不能这样做,因为有其他应用程序使用同一服务器。

我们使用以下技术

MyEclipse 6.5 JPA 和 Hibernate 3.2 Oracle 10g 瘦 JDBC 驱动程序

0 投票
2 回答
8195 浏览

java - JPA 中的复合键

我想创建一个实体,它有一个自动生成的主键,还有一个由其他两个字段组成的唯一复合键。我如何在 JPA 中做到这一点?
我想这样做是因为主键应该用作另一个表中的外键,并且使其复合并不好。

在以下代码段中,我需要命令和模型是唯一的。pk 当然是主键。

0 投票
6 回答
3240 浏览

java - 我应该使用哪个 EJB 3 持久提供程序?

我在一个相当大的 J2EE 项目上使用 EJB 3,默认情况下,Netbeans 将实体 bean 的持久提供程序设置为 TopLink。可以选择将提供程序更改为以下之一,甚至添加新的持久性库:

  • 休眠
  • 古多
  • OpenJPA

您更喜欢使用哪个持久性提供程序?使用其他提供商有什么好处?

虽然 TopLink 似乎很好,但我找不到太多关于如何控制缓存等的好文档。任何帮助将不胜感激。