java - 什么时候需要使用@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;
}
解决方案
它不是必需的,但只是如果您想重命名数据库中的外键,因为在这种情况下,默认情况下您在 Book 表中的外键是 -> bookAutId 如果您添加注释
@Column(name = "book_aut_id") 将是 book_aut_id
推荐阅读
- c# - asp.net Web 应用程序处理全局变量
- javascript - 打开深层链接后显示“应用未安装”反馈消息的最佳方式?
- java - 尝试用项目填充 TextView 时 JavaFX 抛出空指针异常
- docker - Docker 容器在没有端口映射的情况下运行
- javascript - 在 android chrome 浏览器上运行 ffmpeg.wasm 时出现错误“WebAssembly.Memory(): could not allocate memory”
- layout - Julia 中 @animate 和 @layout 的顺序
- python - 为什么我有时在使用 asyncio.run 时从未等待协程
- ggpubr - gg_boxplot 中的彩色点,没有分隔框
- javascript - 反应悬停上下文提供者
- c# - 使用异步任务时,Wpf 读取文件会阻塞 UI 线程