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 personIdPerson 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

使用eclipselink jpa的未知列错误

使用 EclipseLink JPA 将 XML 类型存储到 PostgreSQL

使用 IN 语句的 Eclipselink JPA 类型安全查询