JPA 使用指南 /Eclipselink/JPA 实体生成器
Posted
技术标签:
【中文标题】JPA 使用指南 /Eclipselink/JPA 实体生成器【英文标题】:JPA usage guidelines /Eclipselink/JPA entity generators 【发布时间】:2011-12-09 06:54:39 【问题描述】:我想要一些关于 JPA 在多个(超过 3 个)表格案例中的使用的反馈。
如何从多个连接表中检索记录?使用 JPA Join 语句,或通过检索集合 并迭代和获取下一组外键集合等等?第二种方式似乎是首选方式,但确实很痛苦,而且效率低下。
eclipselink 生成关系的方式是存在大量级联。最重要的是,即使是一个简单的外键也被设置为一个对象而不是一个简单的整数 id。换句话说,要提取一个 X.fk_of_table_Y 我需要调用两个方法
X.getFKTableY().getFKtableY()
第一个函数返回映射类的对象,第二个函数返回整数。哎呀,是不是太低效了?当您只需要我自己的表的 id 时,为什么需要从另一个表加载对象?
你是怎么做的?
您更喜欢使用 eclipselink 生成的方法还是通常自己编写代码?这与(1)基本相同,只是我要求 eclipselink 上下文。
除了 EclipseLink 之外还有哪些工具可以生成代码?如果我可以使用我自己的 JPA 连接查询来处理关系(如果这是一种好方法),我希望从 EclipseLink 不会执行的实体文件中删除关系映射。有没有只生成实体类不生成关系的工具?
如果我希望通过 Eclipselink 每晚(或每当数据库更改时)自动生成实体,我需要做什么?修改源?
原谅我的英文,我能写得更好一点。
【问题讨论】:
【参考方案1】:很抱歉简短的回复,这是来自电话。首先,在 EclipseLink 中可以将 FK 的整数 id 和对象本身作为不同的属性;只需给两个相同的列名,但只将其中一个标记为可更新和可插入。您将能够设置与属性之一的关系,但不能同时设置两者。
其次,我使用实体映射和带有复杂 JPA 查询的 DAO 对象来访问实体,不同之处在于我将查询用于多个连接和聚合函数或需要预取时,而我在遍历时使用实体映射实体图。尽管如此,任何地方都需要进行基准测试——我有一个复杂的查询,当它分解为实体映射时,它的速度更快(60 毫秒对 300 毫秒)。
【讨论】:
谢谢伙计...对不起,我的声誉不足以给你一个积极的观点。我会等待更多答案,然后投票选出其中一个:) Tassos,我如何制作两列?我在 Netbeans 中使用 eclipselink,但如果有更改它的选项,我很乐意再次将其安装到 eclipse 并尝试。我没有看到任何选项,这当然是因为我不太了解该工具。 你所做的是你有 f.e.int personId
和 Person person
作为成员,但您使用 @Column(name="PERSON_ID")
和 @JoinColumn(name="PERSON_ID")
为它们提供相同的数据库列名称。但是,您需要将 updateable=false, insertable=false
添加到两个属性之一(我个人更喜欢 int)。
感谢您的提示。不确定我的经理是否会允许我,因为我们正在尝试通过 eclipselink 在每次数据库更改时自动生成实体。这个过程似乎是手动的。以上是关于JPA 使用指南 /Eclipselink/JPA 实体生成器的主要内容,如果未能解决你的问题,请参考以下文章
JPA 2.0 如何处理死锁(Eclipselink JPA2.0 MySQL)
EclipseLink + JPA + 通用实体 + SINGLE_TABLE 继承
在 OSGI (Karaf) 中使用 EclipseLink JPA