JPA 2.0是否支持用户定义的类型?

时间:2014-02-24 08:37:18

标签: hibernate jpa merge openjpa transient

JPA 2.0是否支持用户定义的类型?我正在使用OpenJPA。我查看了2.0规范,但没有看到任何关于用户定义类型的信息。我有点惊讶,我错过了什么吗?

根据用户定义的类型,我的意思是像Hibernate允许的那样。例如,您可以定义一个客户颜色类型,它映射到RED,GREEN和BLUE列,然后在您的对象中有一个持久的Color字段。这也可以使用Embedded对象来完成,但用户定义的类型可以用于其他事情。

我遇到的具体问题是:

我有一个LocationCode类型(它构成一个Location实体的一部分),它由3个数字字段组成。在我给出的数据库模式中,它被映射到1列,其中3个字段作为字符串附加在一起。我想从应用程序中隐藏这个“映射”逻辑,以保持业务逻辑的清洁,并且比在必须处理这样的存储逻辑时更抽象地定义。

我的第一次尝试是在我的对象上将LocationCode定义为@Transient,并将另一个String字段映射到该列。在@PreUpdate @PrePersist和@PreLoad上,通过设置String字段或将其解析为LocationCode字段,执行3个数值和1个字符串之间的转换,反之亦然。

问题在于EntityManager.merge()。我无法将Location实体合并到数据库中,因为合并不会复制@Transient LocationCode字段。因此,我必须自己处理merge()的这一部分,这种情况会破坏级联合并的使用。

我认为如果我为LocationCode使用自定义用户定义类型,那么我可以拥有一个位于托管字段的LocationCode,但仍然可以执行3个数值到1个数据库列的映射。然后merge()就可以了。

是否在较新版本的JPA中添加了用户定义的类型,如果它们不在2.0中?或者我可以在OpenJPA特定的API中找到它们吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

不,JPA 2.0没有,但JPA 2.1确实如此。

相关问题