对于PostgreSQL,我必须对所有标识符进行双引号,否则它们将隐式小写。我宁愿保留大小写,因为“lastloginattempaiddress”比“lastloginattempaiddress”可读性强得多。
我已经创建了一个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)

最佳答案

似乎是外键列没有被引用的错误。请在“日食线”中记录错误并投赞成票。
DDL失败了吗?解决方法是在脚本中定义DDL,或者将该列切换为小写。

关于postgresql - JPA2(EclipseLink)和PostgreSQL引用问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4570583/

10-12 21:57
查看更多