Spring Boot 无法理解@joincolumn(name=“user_id”)

lnxxn5zx  于 7个月前  发布在  Spring
关注(0)|答案(1)|浏览(57)

我在实体中创建了两个独立类,
在用户类中声明的变量是:

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工程?

ao218c7q

ao218c7q1#

如果你查看一下典型的JPA日志,其中Hibernate日志类型为“create”,你可以看到幕后发生了什么:

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的列(如果它还不存在,并且取决于类型)。这将是保存要连接到用户表的标识符的列。
你甚至可以看到Hibernate自动为我们创建了一个外键约束:

alter table if exists book 
   add constraint FK1wxwagv6cm3vjrxqhmv884hir 
   foreign key (user_id) 
   references user


默认情况下,除非指定,否则book表中的user_id列将包含user表的主键值。在我们的例子中,值定义在User class id字段中。
我在这里包含了User和Book的实体:

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

相关问题