Использование типов доменов и структур PostgreSQL в Java - PullRequest
4 голосов
/ 15 августа 2010

После создания экземпляра EntityManagerFactory я получаю сообщение об ошибке:

...
Exception Description: Predeployment of PersistenceUnit [aPU] failed.
Internal Exception: Exception [EclipseLink-7157] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity class [class Table] must use a @JoinColumn instead of @Column to map its relationship attribute [Price].
...

Цена столбца - тип домена (пример: CREATE TYPE MONEY AS NUMERIC(10,2) FINAL).

Как использовать типы Domain или Struct PostgreSQL? Возможно ли это с JPA?

1 Ответ

2 голосов
/ 15 августа 2010

Проблема на самом деле не в типе столбца, по крайней мере, это не то, на что сейчас жалуется JPA, проблема в том, что JPA не знает, как отобразить тип Price, который не является одним из основных поддерживаемых.тип или сущность.

2.1.1 Постоянные поля и свойства

Постоянные поля или свойства объекта могут быть следующих типов: примитивные типы Java;java.lang.String;другие сериализуемые типы Java (включая оболочки простых типов, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp, определенные пользователем сериализуемые типы, byte[],Byte[], char[] и Character[]; перечисления; типы сущностей и / или коллекции типов сущностей и встраиваемые классы (см. Раздел 2.1.5).

В стандартном JPA попробуйтеиспользовать аннотации Embeddable и Embedded:

@Embeddable
public class Price {
    private BigDecimal amount;
    ...
}

, а затем в вашей сущности:

@Embedded
@AttributeOverrides({
    @AttributeOverride(name="amount", column=@Column(name="AMOUNT"))
})
public Price getPrice() { ... }

Другим вариантом будет использование TransformationMapping (специфично для EclipseLink).

Ссылки

  • JPA 1.0 спецификация
    • 2.1.5 Встраиваемые классы
    • 2.1.6 Отображение по умолчаниюдля несвязанных полей или свойств
    • 9.1.34 Встраиваемая аннотация
    • 9.1.35 Встроенная аннотация
...