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

lnxxn5zx  于 2023-11-17  发布在  Spring
关注(0)|答案(1)|浏览(141)

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

  1. private Long id;
  2. private String name;

字符串
在book类中声明的变量是:

  1. private Long id;
  2. private String title;
  3. private String author;
  4. private boolean borrowed;
  5. @ManyToOne
  6. @JoinColumn(name = "user_id")
  7. private User borrowedBy;


我不能理解@JoinColumn和什么是user_id?并解释我如何@manytoone工程?

ao218c7q

ao218c7q1#

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

  1. create table book (
  2. borrowed boolean not null,
  3. id bigint generated by default as identity,
  4. user_id bigint,
  5. author varchar(255),
  6. title varchar(255),
  7. primary key (id)
  8. )
  9. create table user (
  10. id bigint generated by default as identity,
  11. name varchar(255),
  12. primary key (id)
  13. )

字符串
JPA将在Book表中创建一个名为user_id的列(如果它还不存在,并且取决于类型)。这将是保存要连接到用户表的标识符的列。
你甚至可以看到Hibernate自动为我们创建了一个外键约束:

  1. alter table if exists book
  2. add constraint FK1wxwagv6cm3vjrxqhmv884hir
  3. foreign key (user_id)
  4. references user


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

  1. @Entity
  2. @Data
  3. public class Book {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. private Long id;
  7. private String title;
  8. private String author;
  9. private boolean borrowed;
  10. @ManyToOne
  11. @JoinColumn(name = "user_id")
  12. private User borrowedBy;
  13. }
  14. @Entity
  15. @Data
  16. @AllArgsConstructor
  17. @NoArgsConstructor
  18. public class User {
  19. @Id
  20. @GeneratedValue(strategy = GenerationType.IDENTITY)
  21. private Long id;
  22. private String name;
  23. }

展开查看全部

相关问题