问题标签 [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.
java - 如何保证集合中项目的顺序
我有一个对象列表,列表中的每个对象都有一个位置,除非明确更改,否则该位置可能不会改变,换句话说,对象在队列中。我应该在我的实体类中使用什么集合来存储这些对象以及该集合应该如何注释?
我目前有这个
如果纯粹使用 JPA 无法做到这一点,我将使用 EclipseLink 作为我的 JPA 提供程序,因此如果没有其他帮助,EclipseLink 特定的注释就可以了。
编辑:请注意,问题不在于 Java 不会保留订单,我知道大多数集合都会这样做,问题是我不知道 JPA 保留订单的聪明方法。有一个订单 ID 并通过它进行查询订单是可能的,但在我的情况下,维护订单 ID 很费力(因为用户界面允许重新排序项目),我正在寻找一种更智能的方法来做到这一点。
jpa - 控制 EclipseLink 创建表时的列顺序
我正在使用将“eclipselink.ddl-generation”属性设置为“create-tables”的 EclipseLink。创建的表中列的顺序似乎是随机的。我希望列按特定顺序 - 字段出现在实体类定义中的顺序。
有没有办法告诉 EclipseLink 按实体类定义中的顺序创建列,或者以其他方式指定列顺序?
谢谢。
java - 如何使用 JPA/EclipseLink 与连接表建立多对多关系
我有 2 张桌子:
电影:movieID
用户:用户ID
这些表通过 Queue 表具有多对多关系,并带有一个附加属性 listOrder:
队列:movieID、userID、listOrder
我正在尝试使用 EclipseLink 对此进行建模,但出现“不兼容的映射”错误。这是我的代码示例:
QueueItemPK 的目的是让我可以拥有movieID 和userID 的复合主键。我不确定这是正确的方法。
这是错误: 异常描述:在 [class Movie] 和 [class QueueItem] 之间遇到不兼容的映射。这通常发生在映射的基数与其反向指针的基数不对应时。我对 User 类有同样的错误(错误交替出现)。
但是,当我从 QueueItem 中的电影和用户变量中取出 @Id 注释并将其他一些键作为主键时,它编译时没有错误。
任何建议,将不胜感激。
谢谢, BJ
java - 如何使用 JPA/EclipseLink 从联结表中获取信息?
我有以下多对多映射:
}
public class Cat implements { @Id @GeneratedValue private Integer yID;
}
请忽略对象和属性名称,它们是虚构的和不相关的。这可以编译并正常工作。我也可以这样做:
当我从数据库中取回对象时,我的问题就来了。
打印输出是:
3:{IndirectSet:未实例化}
2:{IndirectSet:未实例化}
这很可能是正常行为。在我看来,当我从表中取回对象时,应该填充与其他对象相关的集合。我的意思是,因为连接表看起来像这样:
X | 是
2 | 3
1 | 3
em.find(Cat.class,3) 应该为 getStudents() 返回一个带有一组 {1,2} 的 Cat 对象,而 em.find(Student.class,2) 应该返回一个带有一组 {3 的 Student 对象} 对于 getCats()。
有没有办法让这成为可能?
谢谢, BJ
jpa - 为什么 EclipseLink 认为我的数据库模式不存在?
我正在使用 EJB 3.0 开发一个 Web 项目,每当 EclipseLink 尝试与数据库交互时,它都会说我正在使用的模式不存在(它确实存在)。
我从 GlassFish 2.1 中得到了一个巨大的、无用的堆栈跟踪,它的开头是:
我可以发布更多的堆栈跟踪,但这真的很无聊。关于为什么 EclipseLink 看不到架构的任何想法?
更多信息:“beamline”是我使用的唯一模式。堆栈跟踪中的 SQL 是由 NamedQuery 生成的,这是我的程序中与该数据库的第一次交互(以及第一次 JPA 交互)。
java - 使用 Eclipselink/JPA,我可以拥有一个与主复合键共享字段的外部复合键吗?
我的数据库有两个实体;公司和个人。一个公司可以有很多人,但一个人必须只有一个公司。表结构如下所示。
我突然想到我可以删除 PERSON.OWNER 并通过外键派生它;但是,我无法在不影响遗留代码的情况下进行此更改。
我将这些建模为 JPA 注释类;
我的 PersonPK 和 CompanyPK 类没有什么特别之处,它们只是作为一个结构体持有所有者和 ID 字段,并覆盖 hashCode 和 equals(o)。
到目前为止,一切都很好。但是,在尝试处理关联时,我遇到了一个问题。似乎如果我有一个现有的公司,并创建一个人,并将该人关联到该公司并坚持该公司,则插入该人时该关联不会被保存。例如,我的主要代码如下所示:
这完成没有错误;但是在数据库中,我发现在 COMP_ID 字段中插入的 Person 记录为空。将 EclipseLink 调试日志记录设置为 FINE,SQL 查询显示为:
我本来希望这会被保存,并且查询相当于
是什么赋予了?对组合键的一半说可更新/可插入=true 对另一半说 =false 是否不正确?如果我对外键的两个部分都有可更新/可插入=真,那么 Eclipselink 无法启动,说如果没有通过指定这些选项将一个设置为只读,我不能使用该列两次。
jpa - 如何合并/扩展来自不同 JAR 的持久性单元?
我将 JPA 持久性用于我的数据模型,并将 Eclipselink 作为持久性提供者。我有一个模块化 (OSGi) 应用程序,其中一个模块包含标准数据模型和一个持久性单元,该单元自动包含包中的所有实体。持久性提供程序位于另一个模块中,该模块运行良好。
现在我想要第三个模块将一些实体添加到持久性单元。我怎么做?我找到了这个解决方案,它似乎特定于我没有使用的 Spring。该方法的总结是编写一个后处理器,它与持久性单元处理挂钩并手动合并来自文件<class>
的条目。persistence.xml
是否可以合并持久性单元?有人可以提出解决方法吗?
java - How to have a @OneToMany relationship with its own entity?
I have items that can contain further items, therefore I need a @OneToMany relationship with the same Entity. I have configured my field like this:
However, Java always throws the following error:
Is that because some items don't have any children?
My JPA implementation provider is EclipseLink.
EDIT: The full stack trace is:
java - JPA EntityManager 删除数据库中的所有记录
我有一个 Servlet 可以插入到我的数据库中。这工作正常。第二个 Servlet 显示第一个已插入的内容,但是每当我运行显示的 Servlet 时,我所有表中的所有记录都将被删除!我的 JPA 实现是 EclipseLink,数据库是 MySQL。
我检索 EntityManagerFactory 的方式是否有可能触发重新创建 db 模式?
我的persistence.xml:
jpa - 在 OSGi 环境中,类路径和类加载器是如何设置的?
我对 OSGi 中的类可见性感到困惑。我正在运行 Apache Felix 并加载以下包:
- 来自 eclipselink的
antlr
,asm
,jpa
和bundlescore
javax.persistence
1.99的 OSGi-fied jar- 带有
com.mysql.jdbc
驱动程序的 OSGi-fied jar - 我自己的一个包,其中包含带注释的实体类和一个
persistence.xml
- 我自己的另一个捆绑包
Persistence.createEntityManagerFactory(String, Map)
现在,我很困惑的是哪个包必须能够看到 MySQL 驱动程序。我认为这将是创建 EntityManagerFactory 的包,但是当我在该清单中导入时出现 ClassNotFound 错误。接下来,我尝试从 eclipselinkjpa
包的清单中导入它,但又出错了。只有当我从包含持久性单元(实体类和)的包的清单中导入它时persistence.xml
,它才能工作。
所以,似乎数据库驱动程序是由类加载器查找 PU 包的,但这对我来说没有意义。这是怎么回事?
我似乎无法为此找到一个简单的文档。这些幻灯片提供了一些提示,但并不十分全面。