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 结果映射