Я борюсь со следующей проблемой при создании CRUD REST API для службы больших данных.Я свел проблему к конкретному сокращенному примеру:
У меня есть два связанных JPA-объекта:
@Entity
class Address {
@Id
Long id;
// 100 other fields
@Column // references Entity organization by ID
Long organizationId;
}
@Entity
class Organization {
@Id
Long id;
@Column
String name;
// 100 other fields
}
На уровне базы данных оба объекта связаны через внешний ключ (адресные ссылки Organization через field organizationId),Чтобы сохранить POJO небольшим для потребителя, я не хочу устанавливать @ManyToOne JPA-отношение между сущностями.Но чтобы сделать его «читабельным для человека» на стороне потребителя REST, я бы хотел видеть не только идентификатор организации, но и имя в объектах адреса.Например, в минимальной концепции объекта, подобной этой:
@Entity
class Address {
@Id
Long id;
// 100 other fields
@ ???
MinimalObject organization;
}
@Entity
class Organization { same as above }
class MinimalObject {
Long id;
String name;
static MinimalObject of(Entity e) {
return new MinimalObject(e.getId(), e.getName());
}
}
Минимальный объект может представлять любую сущность в моей модели, просто предоставляя идентификатор и имя, JPA лучше всего напрямую инициализирует MinimalObject через INNER JOIN при чтении адресаObject.
При таком подходе клиент REST может видеть высокоуровневую информацию об организации адреса (идентификатор и имя), и в случае, если пользователь заинтересован в полномасштабном объекте организации, он может получить его черезGetById контроллера организации / Дао.Контроллер организации также предоставляет Запрос на получение всех минимальных объектов.
Используя эту концепцию, вызов getAllAddresses будет исключать передачу клиенту n-раз (столько же адресов) одних и тех же неинтересных 100 дополнительных полей Организации, например, дляпредставление списка.
В случае обновления или удаления сторонняя таблица (Organization), конечно, остается неизменной, может быть обновлен только OrganizationId в адресе.
У меня в модели сотни таких дочерних и родительских отношений, поэтому я ищу общее решение.
Есть идеи, как смоделировать такую концепцию с помощью JPA?Я рад за любое предложение.Спасибо!