【问题标题】:How to initialize @ReadOnly entities in JPA / EclipseLink如何在 JPA / EclipseLink 中初始化 @ReadOnly 实体
【发布时间】:2013-12-05 00:14:50
【问题描述】:

我正在使用 JPA2 和 EclipseLink。我想使用带有 @ReadOnly 注释的实体。所以在正常情况下,这些实体不应该像 Java 对象一样在整个持久性单元上被更改和唯一。

但是我怎样才能初始化它们呢?他们需要以某种方式到达数据库。我可以在特定情况下引导它们吗?当我知道没有其他事务和缓存在使用时?

【问题讨论】:

  • 传统的 SQL 插入有什么问题?
  • 嗯,它有点难看 ;-) 我更喜欢利用 JPA O2R 映射的强大功能...

标签: java jpa eclipselink jpa-2.0


【解决方案1】:

确实不应该编写 @ReadOnly JPA 实体,因此您不能使用 PersistenceManager(通过 persist() 方法)来初始化它们。但是,您可以创建一个实用程序类,该类在您的应用程序启动时运行,并包含一组静态创建的这些实体以及一个使用本机查询将它们插入数据库的引导方法。

显然,如何使此类执行取决于您的应用程序,但我还建议使该类足够智能,以便仅添加数据库中尚不存在的实体。这样,您的课程将在您的应用程序得到维护时很有用。

【讨论】:

  • 谢谢,史蒂夫。那么有没有办法暂时禁用“@ReadOnly”行为呢?我有一个“配置模式”,我可以在其中确保特定条件(没有 cahces,没有性能要求等)。我很想使用 JPA 来保存这些配置数据。
  • 据我所知无法暂时禁用@ReadOnly。
  • 经过更多研究,我在 API 中找到了用于工作单元的方法“addReadOnlyClass(B.class)”。 A 做了一些实验 - 似乎您可以在事务级别控制只读属性。将完全满足我的需求。但是我没有找到太多可以阅读的内容。有什么经验吗?
  • 您解决了这个问题吗?我面临同样的问题......我唯一的想法是自己实现这个缓存功能。
  • 我现在使用 FlywayDB (flywaydb.org) 通过我的 Maven 构建执行数据库迁移 - 我只需使用这些迁移添加所需的只读值。
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多