我正在使用一个我不想更改的现有架构。该模式在表Person和VitalStats之间具有一对一关系,其中Person具有主键,而VitalStats使用相同的字段作为其主键和对Person的外键,这意味着其值是相应PK的值人。
这些记录是由外部流程创建的,我的JPA代码从不需要更新VitalStats。对于我的对象模型,我希望我的Person类包含VitalStats成员BUT:
当我尝试
@Entity
public class Person{
private long id;
@Id
public long getId(){ return id; }
private VitalStats vs;
@OneToOne(mappedBy = “person”)
public VitalStats getVs() { return vs; }
}
@Entity
public class VitalStats{
private Person person;
@OneToOne
public Person getPerson() { return person; }
}
我遇到的问题是VitalStats缺少@Id,这对于@Entity无效。\
如果我尝试
@Id @OneToOne
public Person getPerson() { return person; }
解决了@Id问题,但要求Person可序列化。我们将回到这一点。
我可以使VitalStats @Embeddable并通过@ElementCollection将其连接到Person,但是即使我知道只有一个元素,也必须将其作为一个集合进行访问。可行,但是既令人讨厌又令人困惑。
那么,是什么阻止了我只是说Person实现了Serializable?没什么,实际上,除了我喜欢代码中的所有内容是有原因的,而且我看不到任何逻辑,这使得我的代码可读性较差。
同时,我只是将VitalStats中的Person字段替换为一个长的personId,并使其成为VitalStats的@Id,所以现在@OneToOne可以使用了。
所有这些解决方案(对我而言)似乎都是一个简单的问题,有些笨拙,因此我想知道我是否缺少任何内容,或者是否有人至少可以向我解释为什么Person必须可序列化。
TIA