gpt4 book ai didi

java - 为什么 @ManytoOne 或 @OnetoMany 在 Spring Boot 中产生问题

转载 作者:行者123 更新时间:2023-12-02 10:01:43 25 4
gpt4 key购买 nike

我在后端应用程序中定义了一些实体,它们具有一对 @ManytoOne 和 @OneToMany 关系,但在 psequel 中每次执行时,每个外键和主键关系都创建了附加结构。我在执行时看到此异常,我不知道如何恢复

Hibernate: create table user_locations (user_id int4 not null, locations_id int4 not null) Hibernate: alter table if exists location_user_id add constraint FKfsq9me9k3dj93oujbfgplkfrx foreign key (user_id_id) references user 2019-04-08 15:18:29.001 WARN 2023 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL "alter table if exists location_user_id add constraint FKfsq9me9k3dj93oujbfgplkfrx foreign key (user_id_id) references user" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table if exists location_user_id add constraint

FKfsq9me9k3dj93oujbfgplkfrx foreign key (user_id_id) references user" via JDBC Statement

这就是我的用户表的样子:

@Entity
public class User {
private String gmailToken;
private String emailAddress;

@Id
private int Id;

@ManyToMany
private List<Location> locations;

}

位置实体如下所示:

@Entity
public class Location {

private String name;
private String country;
private String countryCode;
private Point geoCordinates;
private double googleRating;
private String phoneNumber;
private ArrayList workingHours = new ArrayList<WorkingHours>();

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int Id;
@ManyToMany
private List<User> userId;

}

我在这里缺少什么吗?

编辑添加:

我已将用户实体更改为如下所示:

public class User {
private String gmailToken;
private String emailAddress;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int Id;

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="USER_ID")
private List<Location> locations;

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="USER_ID")
private List<ReviewRequest> reviewRequests;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="USER_ID")
private List<Response> responseForRequests;

public User(String gmailToken){
this.gmailToken =gmailToken;
}
}

位置实体如下所示:

公开课地点{

private String name;
private String country;
private String countryCode;
private Point geoCordinates;
private double googleRating;
private String phoneNumber;
private ArrayList workingHours = new ArrayList<WorkingHours>();

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int Id;

@ManyToMany(mappedBy = "location")
private List<User> userId;

@OneToMany(mappedBy = "location")
private List<Customer> customerId;

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="LOCATION_ID")
private List<ReviewRequest> reviewId;

}

我仍然面临创建单个表和在给定用户表中创建外键列的问题。

看起来mappedBy和@JoinColumn似乎不正确?

最佳答案

1) 您应该在关系的拥有方指定@JoinTable(除非您同意 hibernate 命名默认值)

2) 通过在其中一个实体上添加 mappedBy 来指定拥有方:

@ManyToMany
private List<Location> locations;

关于java - 为什么 @ManytoOne 或 @OnetoMany 在 Spring Boot 中产生问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55570880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com