首页 > 解决方案 > 什么时候需要使用@JoinColumn 注解?

问题描述

我了解 @JoinColumn 用于托管关联。但是,如果我们在数据库中实现了引用完整性,那么我们是否仍然需要对字段(类中的外键字段)使用 @JoinColumn 注释。假设我有 2 张桌子——作者和书。我是否需要在实体类中为 book_aut_id 字段添加 @JoinColumn 注释?因为即使我不使用@JoinColumn 注解,仍然会保持参照完整性。

create table mydb.author(
aut_id int auto_increment,
aut_name varchar(20),
constraint author_pk primary key (aut_id)
);
create table mydb.book(
book_id int auto_increment,
book_title varchar(20),
book_aut_id int,
constraint book_pk primary key (book_id),
constraint book_fk foreign key (book_aut_id) references author(aut_id)
);
@Entity
@Table(name="book")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "book_id")
    private int bookId;
    
    @Column(name = "book_title")
    private String bookTitle;
    
    @Column(name = "book_aut_id")
//  @OneToOne
//  @JoinColumn(name="aut_id")
    private int bookAutId;
}
@Entity
@Table(name = "author")
@Data
public class Author {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "aut_id")
    private int authorId;
    
    @Column(name = "aut_name")
    private String authorName;
}

标签: javahibernateorm

解决方案


它不是必需的,但只是如果您想重命名数据库中的外键,因为在这种情况下,默认情况下您在 Book 表中的外键是 -> bookAutId 如果您添加注释
@Column(name = "book_aut_id") 将是 book_aut_id


推荐阅读