Объединить один дополнительный столбец из другой таблицы в сущности - PullRequest
0 голосов
/ 17 апреля 2019

Я борюсь со следующей проблемой при создании 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?Я рад за любое предложение.Спасибо!

...