JPA:如何只使用ID而不使用对象来建立关系?

时间:2018-10-02 20:42:00

标签: java sql hibernate rest jpa

使用JPA时,是否可以与另一个实体建立@OneToMany关系并且仅保留ID集合而不是Object Set?

例如,在处理图书图书馆时,我会遇到类似这样的事情:

@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
}

可以,并且可以正常工作,至少直到我需要通过REST API共享Library实体为止。 在移动库的JSON(服务器->客户端和客户端->服务器)时,我想避免传递Books对象列表,而只是传递和接收Books ID列表({{1} }),并且仍然能够通过JPARepository执行基本的CRUD操作。

通过这种方式,可以减小共享JSON的大小,并降低实体之间的耦合。

JPA中的实体之间是否可能有这样的轻量级关系

我想拥有一个 Library 实体,如下所示:

List<Long>

1 个答案:

答案 0 :(得分:0)

将实体传递给Controller不是一个好主意。您应该始终考虑将实体转换为dto-s。另外,我不建议在控制器级别使用ID,因为有人可能会拿走您的ID并由他们获取整个数据库。这是非常不安全的。