Java Hibernate/JPA可选的一对一双向映射

Java Hibernate/JPA可选的一对一双向映射,java,hibernate,jpa,Java,Hibernate,Jpa,我有两个表,每个表用来描述一个对象的信息,但是来自两个不同的系统。因此,给定对象可以存在于其中一个、另一个或两者中 service_A --------------- service_A_pkey UUID NOT NULL PRIMARY KEY, common_identifier TEXT NOT NULL, <more columns to store data> 应用程序启动,但实际查找ServiceAData对象会导致 org.postgresql.util.PSQLE

我有两个表,每个表用来描述一个对象的信息,但是来自两个不同的系统。因此,给定对象可以存在于其中一个、另一个或两者中

service_A
---------------
service_A_pkey UUID NOT NULL PRIMARY KEY,
common_identifier TEXT NOT NULL,
<more columns to store data>
应用程序启动,但实际查找ServiceAData对象会导致

org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = uuid
将ServiceAData的注释更改为与ServiceBData的注释完全相同(即@OneToOne上没有mappedBy属性,并添加@JoinColumn)会导致本质上相同的问题

Caused by: java.lang.IllegalArgumentException: Invalid UUID string: CCGNG23DG0WQ
        at java.util.UUID.fromString(UUID.java:194) ~[na:1.7.0_65]
在这两种情况下,它都试图将文本/字符串公共_标识符列转换为UUID。我错过了一些简单的东西吗?走错方向了吗?或者我正在尝试的是不可能的?我不确定“双向一对一映射”是否真的是我应该在谷歌上搜索的

明确地说,我不希望任何一个对象拥有另一个对象——我只是希望查找任何一个对象,如果它存在的话,用另一个对象进行补充


谢谢你的帮助

我正在使用JPA2.1和Hibernate 5.0.1。以下是我的作品:

让两个映射对象成员使用以下注释:

@OneToOne(optional = true)
@JoinColumn(name = "common_identifier", referencedColumnName = "common_identifier", insertable = false, updatable = false)

让两个实体都实现可序列化。我不确定为什么这个部分是必需的,但似乎是。

相当肯定optional=true不是必需的;这是默认设置,因为可选映射在JPA的早期版本中不受支持,但是将其放在其中可能对开发人员很友好。
Caused by: java.lang.IllegalArgumentException: Invalid UUID string: CCGNG23DG0WQ
        at java.util.UUID.fromString(UUID.java:194) ~[na:1.7.0_65]
@OneToOne(optional = true)
@JoinColumn(name = "common_identifier", referencedColumnName = "common_identifier", insertable = false, updatable = false)