没有外键的Spring Boot JPA双向映射

时间:2019-02-19 20:11:35

标签: spring-boot jpa mapping

是否可以使用具有双向映射且没有外键的JPA来实现DDL?如果可以的话,这是最佳做法吗?

@Entity
class Book{
    int id;
    String title;
    @OneToMany(mappedBy="book")
    Set<BookDetail> book_detail;
}

@Entity
class BookDetail{
    int id;
    String name;
    String description;
    @ManyToOne
    Book book;
}

2 个答案:

答案 0 :(得分:0)

如果没有至少一个 foreign 键,您将无法执行此操作,因为数据库需要在两个实体-BookDetail和Book之间建立某种连接。通过在BookDetail中使用纯整数属性(可以存储Book id的值),可以为这些实体创建两个表而没有真正的外键。 但是不要那样做!
使用外键,您的DBMS会生成约束,因此可以了解该关系,并且可以防止某些不安全的删除和插入,因此每个BookDetail的行都引用现有的Books。
如果没有真正的外键,您可能会意外删除一本书,而BookItem的

答案 1 :(得分:0)

是的。可以使用联接表。当然会有外键。

@Entity
class Book{

    @OneToMany
    List<BookDetail> bookDetail;

}

@Entity
class BookDetail{

    @ManyToOne(fetch = FetchType.LAZY)
    Book book;

}

what is @JoinColumn and how it is used in Hibernate