Проблема на самом деле не в типе столбца, по крайней мере, это не то, на что сейчас жалуется 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 Встроенная аннотация