JPA2 (EclipseLink) 和 PostgreSQL 的引用问题

Posted

技术标签:

【中文标题】JPA2 (EclipseLink) 和 PostgreSQL 的引用问题【英文标题】:quoting problem with JPA2 (EclipseLink) and PostgreSQL 【发布时间】:2011-06-02 00:26:21 【问题描述】:

对于 PostgreSQL,我必须用双引号括起所有标识符,否则它们将被隐式小写。我更喜欢保留大小写,因为“lastLoginAttemptIpAddress”比“lastloginattemptipaddress”更具可读性。

我创建了一个 orm.xml 文件(完整内容如下)。这导致 EclipseLink 引用了大多数标识符,但在定义外键约束时它特别没有引用列名。如何告诉 EL 引用 all 标识符?

我还尝试在明确指定的表/列名称中使用引号来使 EL 引用标识符。首先,这也不起作用——同样的行为。除此之外,(1)迫使我指定名称两次(我已经在属性访问器名称中这样做了)并且以重构工具不可见的方式,(2)这是错误的——引号不是名称的一部分,(3)当它实际上是我正在使用的数据库系统的特定特征时,它迫使我在 POJO 级别修复引用。

orm.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd">

    <description>description here</description>
    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <delimited-identifiers />
        </persistence-unit-defaults>
    </persistence-unit-metadata>

</entity-mappings>

实体类:

@Entity
public class UserX 

    ...

    @Id
    @GeneratedValue(generator = "UserX_id_seq")
    @SequenceGenerator(name = "UserX_id_seq", allocationSize = 1)
    public int getId()  ... 

    ...

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    public UserX getModificationUser()  ... 


生成的查询(注意列名周围缺少引号):

ALTER TABLE "UserX" ADD CONSTRAINT "FK_UserX_modificationUser_id" FOREIGN KEY (modificationUser_id) REFERENCES "UserX" (id)

【问题讨论】:

您成功地创建了两个帐户 - 我已经为您合并了它们。我还将您下面的评论从答案转换为实际评论。如果您在登录 Stack Overflow 时遇到问题,请访问 meta.***.com 并告诉我们。 我没有确认任何帐户创建对话框,甚至那些试图伪装成“使用您的 Google 帐户登录”的对话框也没有确认。 【参考方案1】:

似乎是没有引用外键列的错误。请在 EclipseLink 中记录错误并投票。

DDL 是否失败?一种解决方法是在脚本中定义 DDL,或者只将该列切换为全部小写。

【讨论】:

我已将此记录为错误并使用手工制作的 DDL 脚本。谢谢您的回答。可悲的是,如果不创建另一个网站帐户,我就无法投票给你(*** 甚至声称我可以使用我的 Google 帐户而不是 OpenID 进行身份验证,然后突然尝试用 OpenID 注册我,而我从来没有打算这样做。一定会喜欢这个.. .) 詹姆斯,即使我使用强制我的帐户登录,我仍然无法投票给你。对不起。

以上是关于JPA2 (EclipseLink) 和 PostgreSQL 的引用问题的主要内容,如果未能解决你的问题,请参考以下文章

jpa2/eclipselink 的合适 DAO 结构是啥?

JPA 2.1、Eclipselink、SQL Server、Spring - NamedStoredProcedureQuery 结果映射

来自Openjpa的JPA Eclipselink - IBM WAS 8.5.12服务器

无法理解 EclipseLink 警告

JPA 版本混淆

从日期开始的日期 EXTRACT(DAY,s.date) 不起作用 jpa 和 eclipseLink