问题标签 [eclipselink]

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 投票
2 回答
723 浏览

maven-2 - 是否有用于 eclipselink 的 Maven 构建,使 OSGi 包在 Felix 和其他人中运行?

Eclipselink OSGi 包似乎无法在某些 OSGi 容器中工作,尤其是 Felix,因为它们无法导入它们实际需要的包(以及由系统导出的包)。一个示例是当前 1.1.3 版本javax.xml.namespace的捆绑包中缺少导入。core

eclipselink 团队通过在 1.2 和 2.0 版本中使用 BND 工具进行构建过程来针对此类问题,因此一旦这些问题都出来了,我们可以预期这个问题会消失。

同时,有没有人从 eclipselink 源中建立并发布了一个 Maven 构建,它的捆绑正确吗?

0 投票
3 回答
3497 浏览

jpa - 在 Spring dm Server 1.x 中使用 EclipseLink JPA 时出现 Aspectj 加载时间编织的问题

我试图让 EclipseLink JPA 在 Spring dm Server OSGi 环境中工作。

从 Spring Enterprise Bundle Repository 下载的相关框架和库包括:

  • dm 服务器 1.0.2.SR02
  • AspectJ 运行时 1.6.3
  • AspectJ 韦弗 1.6.3
  • Spring 框架 2.5.6.A
  • Eclipse 持久性 1.1.0
  • Javax 持久性 API 1.99.0

我遵循与PetClinic-1.5.0示例中介绍的相同结构来设置 EclipseLink JPA。一切正常,直到启用延迟获取(这需要代理对象)。

启用延迟获取后,以下错误表明 load-time-weaving 无法正常工作。

---- (为便于阅读而截断)

异常 [EclipseLink-60] (Eclipse Persistence Services - 1.1.0.r3634):org.eclipse.persistence.exceptions.DescriptorException 异常描述:方法 [_persistence_setcustomer_vh] 或 [_persistence_getcustomer_vh] 未在对象 [net.fractech] 中定义.fds.backoffice.Job]。内部异常:java.lang.NoSuchMethodException:net.fractech.fds.backoffice.Job._persistence_getcu stomer_vh() 映射:org.eclipse.persistence.mappings.OneToOneMapping[customer] 描述符:RelationalDescriptor(net.fractech.fds.backoffice.J ob --> [DatabaseTable(JOBS)])


这表明 _persistence_getcustomer_vh() 和 _persistence_setcustomer_vh() 方法没有自动编织到 Job 域对象中。

问题

1.) 我如何确定 load-time-weaving 是否真的有效;此外,我如何记录启动了哪个加载时间编织代理和编织器?如何将开关传递给此编织器以使其输出调试信息?

我假设我从 <context:load-time-weaver aspectj-weaving="on" /> 开始加载时间编织

2.) 很多搜索显示我在使用dm Server时不需要将-javaagent参数传递给jvm。这个对吗?

3.) 我通过断言 com.springsource.org.eclipse.persistence;version="[1.1.0,1.1.0]";import-scope 确保我在另一个包中的域对象可以访问 Eclipse 持久性类: =我的 eclipselink 包中的应用程序,并包括 PAR 中的所有应用程序包。在 Spring dm Server 中启用 EclipseLink JPA 是否需要任何其他配置?

0 投票
3 回答
59032 浏览

java - 在 JPA 查询中使用 CURRENT_DATE 的示例

谁能指出我如何CURRENT_DATE在 JPA 查询中使用的示例?

CURRENT_DATE在 JPA 中指定,但我无法使其工作。我总是得到unexpected token [CURRENT_DATE]例外。由于它是在 JPA 中指定的,所有提供者都应该遵守它,对吗?

我正在使用 EclipseLink 2.0 顺便说一句。

0 投票
1 回答
2507 浏览

jpa - OSGi(Spring DM)环境中的JPA实体(在多个持久性单元中)让我感到困惑

我对我的 JPA 相关对象的奇怪行为感到有点困惑。我有三个捆绑:

用户包确实包含一些与用户相关的对象,但主要是User对象。

能量包确实包含一些与能量相关的对象,尤其是ConsumptionTerminal包含用户列表的对象。

Index 包确实包含一个完全没有依赖关系的 Index 对象。

我的 OSGi 环境如下:

  • 提供 2 个服务的 DataSource 包:dataSource 和 jpaVendorAdapter。

  • 三捆。他们消耗dataSourcejpaVendorAdapter

    他们的module-context.xml文件看起来像:

    他们都有一个persistence.xml文件:

    • 用户

      /li>
    • 活力

      /li>
    • Index :这个有最简单的persistence.xml,只有Index 类(没有共享类)。

我正在使用命名@PersistenceUnit注释,例如@PersitenceUnit(name = 'securityPU')(用于用户包)。

最后,我使用 EclipseLink 作为 Jpa 提供者和 Spring DM(+ Spring DM Server 在开发过程中)

问题如下:

  1. 部署用户包后,我可以保留用户对象。
  2. 当同时部署用户包和能量包时,我无法持久化用户对象(能量对象也不是)。但我一点也不例外
  3. Index bundle 完全没有问题。

该错误与数据源无关(到目前为止,我尝试使用 PostgreSQL 和 MySQL)。

我的第一个结论是,<class>net.nextep.amundsen.security.domain.User</class>两个持久性单元都造成了麻烦。我尝试不使用它(并将依赖于用户的对象隐藏在能量包中),但它也失败了。

我对那个错误有点困惑。我也不太确定在这种情况下的事务管理。

我不是设计这个架构的人(但我告诉我的实习生没测试它就OK.. 真丢人)但如果我能理解这个错误并可能在不重写捆绑包的情况下修复它(并破坏我的实习生工作),我会很感激。难道我做错了什么 ?(很明显,但是什么..)我在阅读文档时错过了什么吗?

顺便说一句,当涉及到 JPA、EclipseLink(或任何 JPA 提供程序)和 Spring DM(以及一般的 OSGi)时,我也在寻找一些最佳实践或建议。我从 Mike Keith 那里找到了关于这个主题的有趣幻灯片(通过浏览 Stackoverflow)。

0 投票
2 回答
1020 浏览

java - 支持用于测试/生产的不同 JPA 生成类型

我想在我的生产 MySQL 系统中使用 GenerationType.IDENTITY 作为主键。但是对于本地开发和测试,我想使用 HSQLDB。问题是 HSQLDB 不支持 GenerationType.IDENTITY (至少对于 Eclipselink)。我尝试设置 GenerationType.AUTO,它默认为 HSQLDB 的 TABLE,但不幸的是它对 MySQL 也是如此,这不是我想要的。有没有办法在persistence.xml中覆盖它?我可以使用其他一些技巧来让每个环境都做正确的事情吗?我没有在 XML 中设置任何实体配置(全部在注释中),我不想更改它,所以我正在寻找一种避免这种情况的方法。

0 投票
2 回答
4755 浏览

jpa - EclipseLink,EntityManager 需要两个持久性单元

我有一个 jar 库 A(或 Eclipse 中的项目),它有自己的持久性单元(META-INF/persistence.xml)和一些实体类,另一个项目(B)使用这个。在项目 B 中还有持久性单元和实体类。

在项目 BI 中需要使用项目 A 和 B 中的实体类。但是如果我将“A”设置为持久性单元名称,如果此查询在项目 B 的实体中,EntityManager 将无法创建命名查询。如果我将“B”设置为持久性单位名称,它不能从项目 A 的实体创建命名查询。错误消息是:

持久性单元能否以某种方式包含其他持久性单元?或者有没有其他方法可以解决这个问题?

0 投票
2 回答
475 浏览

java - 具有级联 VersionLockingPolicy 的父级未获取对私有子对象的数据库更改

我有一个父对象,其版本锁定策略定义如下:

并有一个映射如下的孩子:

当我更改子字段并直接在数据库上更新子 cacheId 时,eclipselink 查询不会获取更改。然后当我更新父对象的 cacheId 时,eclipselink 查询确实将更改返回到子字段。

我认为级联版本锁定策略应该导致父级在其任何私有拥有的子对象被更新时更新(由它们的版本字段定义)。我错了,还是我的代码中的其他地方可能有问题?

0 投票
2 回答
8877 浏览

java - EclipseLink JPA `@PreUpdate` 调用不持久

我在 StackOverflow 上遇到了一些类似的问题,尝试了解决方案,但没有找到答案。

我正在使用一种相当常见的 JPA 策略来设置某些实体的最后修改时间。设置列和字段,然后标记一个方法@PreUpdate并让它设置它们等于当前时间。

问题是我可以在调试器中看到正在调用该方法并且正在更新该字段,但是在我的数据库日志中我只看到一个 SQL 调用来更新不包括时间戳字段的 UPDATE 已更改字段.

使事情进一步复杂化@PrePersist非常有效,只会@PreUpdate表现出这种行为。

到目前为止,我发现的最接近的解释是在这个LINK

类似问题:#1725699 和 #1745890

我正在使用 EclipseLink v2 和 JPA v1 来与 GlassFish v2 兼容。

我尝试直接在 Entity 类中的方法上使用这两个注释,以及使用注释EntityListener附加到 Entity 类@EntityListener

我怀疑这是 EclipseLink 中的一个错误,但我无法证明这一点。

错误与否我非常希望这个简单的操作能够工作。这个实现有什么问题吗?这是 EclipseLink 中的一个已知问题吗?这是 JPA 中的一个已知问题吗?有没有解决的办法?

如果没有访问数据库并使用触发器,是否有替代路径让我的 Java 代码设置 updated_on 时间戳?

感谢您的建议!

代码片段如下。

实体字段:

带注释的更新方法:

0 投票
3 回答
23176 浏览

java - Eclipselink JPA、Oracle、Weblogic、Calling Persist 不提交数据库

我刚刚开始研究 java 持久性(目前使用 eclipse 的默认提供程序 eclipselink)。基本上只是创建一个对象并尝试将其持久化到数据库(Oracle)。我的理解是,默认事务性应该在方法返回时将新对象提交到数据库,但似乎没有发生任何事情。有任何想法吗?

持久性.xml:

实体类:

此外,为了回应对这个问题的回复,我列出的代码显示了正在执行的提交(为简洁起见,删除了一些细节)

但是如果我在持久化之后添加'flush',我会得到'notransaction'......

0 投票
5 回答
7682 浏览

java - 如何根据用户的选择动态生成 SQL 查询?

这与以下问题相同:

如何根据用户的选择动态生成 SQL 查询?

唯一的区别是,我有兴趣看到也使用 Java/JPA(+可能是 EclipseLink 或 Hibernate 特定扩展)的解决方案。

我需要创建一个 GUI,用户可以使用它选择几个属性,这些属性将用于查询数据库以找到合适的人。我正在寻找如何根据用户的选择动态生成数据库查询的想法。

查询将包含几个字段,但为了了解这个想法,我将仅包括以下三个字段作为示例:

  • Occupation - 可以有 0 到 n 个职业字符串。如果给出了职业字符串,则其中之一必须匹配。

  • 年龄- 年龄可以给出:

    1. 完全匹配 (30)
    2. 范围(例如 30-40)
    3. 小于一个值 (-40)
    4. 超过一个值 (30-)

年龄参数在查询中是可选的。此外,用户可以指定年龄是否为必填参数。如果不是必需的,并且一个人没有年龄是他/她的个人资料,则忽略此人的年龄标准。

  • 身高- 与年龄相似

示例查询:

没有给出标准:

只给出了职业:

已经给出了几个职业:

年龄已被指定为大于值,并且它必须存在于人员的个人资料中:

高度已作为一个范围给出,它不需要存在于人员的个人资料中:

不同标准的组合:

我已经实现了能够将查询生成为字符串的代码,但它肯定不是太漂亮。我正在寻找实现这一目标的最有效和最漂亮的方法。