在Java中使用PostgreSQL域和结构类型

在Java中使用PostgreSQL域和结构类型,java,postgresql,orm,jpa,eclipselink,Java,Postgresql,Orm,Jpa,Eclipselink,创建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.V

创建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].
...
列Price是域类型(例如:
创建类型MONEY AS NUMERIC(10,2)FINAL


如何使用域或结构PostgreSQL类型?JPA有可能吗?

问题其实并不在于列类型,至少JPA现在并不抱怨这一点,问题在于JPA不知道如何映射一个
Price
类型,它既不是基本支持的类型,也不是实体

2.1.1持久字段和属性 的持久字段或属性 一个实体可能具有以下特征: 类型:Java基元类型;
java.lang.String
;其他Java 可序列化类型(包括 基本类型的包装器,
java.math.biginger
java.math.BigDecimal
java.util.Date
java.util.Calendar
java.sql.Date
java.sql.Time
java.sql.Timestamp
,用户定义 可序列化类型,
字节[]
字节[]
字符[]
字符[]
;枚举;实体 类型和/或实体类型集合;以及可嵌入类(见第2.1.5节)

对于标准JPA,尝试使用
Embedded
Embedded
注释:

@Embeddable
public class Price {
    private BigDecimal amount;
    ...
}
然后在您的实体中:

@Embedded
@AttributeOverrides({
    @AttributeOverride(name="amount", column=@Column(name="AMOUNT"))
})
public Price getPrice() { ... }
另一种选择是使用(特定于日食的)

工具书类
  • JPA1.0规范
    • 2.1.5可嵌入类
    • 2.1.6非关系字段或属性的映射默认值
    • 9.1.34可嵌入注释
    • 9.1.35嵌入式注释

我不知道你的问题的答案…但你真的在做
创建类型money
?可能是一个已经是有效的postgres类型的问题(尽管我认为它被认为是不应该使用的)不,这只是个例子。我使用:创建域“public”。“price”作为数字(12,2);PostgreSQL对用户定义的数据类型具有可靠的内置支持,但我想知道如何在Java中使用它们。好的。我将使用您的参考资料来找到解决方案。谢谢您的帮助。