在Java中使用PostgreSQL域和结构类型
创建EntityManagerFactory实例后,我收到错误消息:在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
...
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中使用它们。好的。我将使用您的参考资料来找到解决方案。谢谢您的帮助。