引用JPA2(EclipseLink)和PostgreSQL的问题

时间:2010-12-31 14:24:07

标签: postgresql jpa eclipselink quotes

使用PostgreSQL,我必须对所有标识符进行双重引用,否则它们将隐式地低位引用。我更喜欢保留大小写,因为“lastLoginAttemptIpAddress”比“lastloginattemptipaddress”更具可读性。

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

我还尝试在显式指定的表/列名称中使用引号来使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)

1 个答案:

答案 0 :(得分:3)

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

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