【发布时间】: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.stackoverflow.com 并告诉我们。
-
我没有确认任何帐户创建对话框,甚至那些试图伪装成“使用您的 Google 帐户登录”的对话框也没有确认。
标签: postgresql jpa eclipselink quotes