Почему @ManytoOne или @OnetoMany создают проблемы в SpringBoot - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть некоторые сущности, определенные в моем бэкэнд-приложении, которые имеют пару отношений @ManytoOne и @OneToMany, но каждое из них выполняется в псевдоклере, что каждое из отношений внешнего и первичного ключа создало дополнительные структуры.И я вижу это исключение при выполнении. Я не уверен, как отменить

Hibernate: создать таблицу user_locations (user_id int4 не ноль, location_id int4 не ноль) Hibernate: изменить таблицу, если существует location_user_id добавить ограничение FKfsq9me9k3dj93oujbfgplkrrxrrключ (user_id_id) ссылается на пользователя 2019-04-08 15: 18: 29.001 ПРЕДУПРЕЖДЕНИЕ 2023 --- [main] ohtsiExceptionHandlerLoggedImpl: GenerationTarget обнаружил команду принятия исключения: ошибка выполнения DDL ", измените таблицу, если существует location_user_id, добавьте ограничениепользователь "через оператор JDBC

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

FKfsq9me9k3dj93oujbfgplkfrx внешний ключ (user_id_id) ссылается на пользователя" через оператор JDBC

Вот так выглядит моя таблица пользователя:

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

И расположение Entity выглядит следующим образом:

открытый класс 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(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;

}

Я все еще сталкиваюсь с проблемами при создании отдельных таблиц и создании столбцов внешнего ключав данной таблице User.

Похоже, что mappedBy и @JoinColumn кажутся неверными?

1 Ответ

1 голос
/ 08 апреля 2019

1) Вы должны указать @JoinTable на стороне-владельце отношений (если у вас нет штрафов по умолчанию в именах гибернации)

2) Укажите принадлежащую сторону, добавив mappedBy на одну из сущностей:

@ManyToMany
private List<Location> locations;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...