JPA: как иметь отношения только с идентификаторами вместо объектов? - PullRequest
0 голосов
/ 02 октября 2018

При использовании JPA возможно ли иметь отношение @OneToMany с другим объектом и сохранять только набор идентификаторов вместо набора объектов?

, например, при работе с книгами и Библиотеки У меня будет что-то вроде этого:

@Entity(name = "Library")
public class Library {

    @Id
    private Long id;

    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "book_id")
    private Set<Book> books = new HashSet<>();

    //Getters and setters
}

@Entity(name = "Book")
public class Book {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    private String author;

    @NaturalId
    private String isbn;

    //Getters and setters
}

Это нормально и работает нормально, по крайней мере, до тех пор, пока мне не придется делиться сущностью Библиотеки через API REST.При перемещении JSON библиотеки (в обоих направлениях: сервер -> клиент и клиент -> сервер) я хотел бы избежать передачи списка объектов книг, но вместо этого просто передать и получить список идентификаторов книг (List<Long>)и все еще в состоянии выполнять основные операции CRUD через JPARepository.

Таким образом, можно было бы уменьшить размер общего JSON и также иметь более низкую связь между объектами.

Возможно ли иметь такие облегченные отношения между сущностями в JPA?

Я хотел бы иметь Library , как показано ниже:

@Entity(name = "Library")
public class Library {

    @Id
    private Long id;

    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "book_id")
    private Set<Long> books = new HashSet<>();

    //Getters and setters
}

1 Ответ

0 голосов
/ 03 октября 2018

Передача сущностей в контроллер не очень хорошая идея.Вы всегда должны думать о преобразовании сущностей в dto-s.Кроме того, я не рекомендовал бы иметь идентификаторы на уровне контроллера, так как кто-то может взять ваши идентификаторы и захватить ими всю базу данных.Это крайне небезопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...