проблема цитирования с JPA2 (EclipseLink) и PostgreSQL - PullRequest
2 голосов
/ 31 декабря 2010

В 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 Ответ

3 голосов
/ 04 января 2011

Кажется, это ошибка, что столбец внешнего ключа не заключен в кавычки. Пожалуйста, зарегистрируйте ошибку в EclipseLink и проголосуйте за нее.

Сбой DDL? Обходным путем будет определение DDL в сценарии или переключение только этого столбца в нижний регистр.

...