我在实体中创建了两个独立的类,
在用户类中声明的变量是:
private Long id;
private String name;
在 book 类中声明的变量是:
private Long id;
private String title;
private String author;
private boolean borrowed;
@ManyToOne
@JoinColumn(name = "user_id")
private User borrowedBy;
我无法理解@JoinColumn,什么是user_id? 并解释一下 @manytoone 是如何工作的?
如果您查看 Hibernate DDL 类型“create”的典型 JPA 日志,您可以看到幕后发生的情况:
create table book (
borrowed boolean not null,
id bigint generated by default as identity,
user_id bigint,
author varchar(255),
title varchar(255),
primary key (id)
)
create table user (
id bigint generated by default as identity,
name varchar(255),
primary key (id)
)
JPA 将在您的 Book 表中创建一个名为 user_id 的列(如果它尚不存在,并且取决于 DDL 类型)。这将是保存要加入用户表的标识符的列。
你甚至可以看到 Hibernate 自动神奇地为我们创建了一个外键约束:
alter table if exists book
add constraint FK1wxwagv6cm3vjrxqhmv884hir
foreign key (user_id)
references user
默认情况下,除非指定,否则 book 表中的 user_id 列将包含 user 表的主键值。在我们的例子中,是 id 字段中定义的值。
我已在此处包含用户和预订的实体:
@Entity
@Data
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String author;
private boolean borrowed;
@ManyToOne
@JoinColumn(name = "user_id")
private User borrowedBy;
}
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}