Я работаю с существующей схемой, которую лучше не менять. Схема имеет взаимно-однозначное отношение между таблицами Person и VitalStats, где Person имеет первичный ключ, а VitalStats использует то же поле, что и первичный ключ, и внешний ключ для Person, что означает, что его значение является значением соответствующего PK человека.
Эти записи создаются внешними процессами, и мой код JPA никогда не нуждается в обновлении VitalStats.
Для моей объектной модели я хотел бы, чтобы мой класс Person содержал член VitalStats, НО:
Когда я пытаюсь
@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 был Serializable. Мы вернемся к этому.
Я мог бы сделать VitalStats @Embeddable и подключить его к Person с помощью @ElementCollection, но тогда к нему нужно будет обращаться как к коллекции, даже если я знаю, что есть только один элемент. Выполнимо, но и немного раздражает, и немного сбивает с толку.
Так что же мешает мне просто сказать, что Person реализует Serializable? На самом деле ничего, кроме того, что мне нравится, что все в моем коде присутствует по какой-то причине, и я не вижу в этом никакой логики, что делает мой код менее читабельным.
Тем временем я просто заменил поле Person в VitalStats длинным personId и сделал его @Id, так что теперь @OneToOne работает.
Все эти решения того, что кажется (на мой взгляд) простой проблемой, немного неуклюжие, поэтому мне интересно, что я что-то упускаю или кто-то может хотя бы объяснить мне, почему Person должен быть сериализуемым .
ТИА