Ошибка создания таблицы при связи many to many

285
23 апреля 2018, 00:25

Собственно, при создание таблиц ругается на связи и в итоге таблица group не создается, а создаются только subject и subject_group, вот лог:

Hibernate: alter table subject drop constraint  FKdvgvxo0oxhxeepkkwug7vg4w4
Hibernate: alter table subject_group drop constraint FK8v7h1pu0ewqq6v6nky8jfwh1l
Hibernate: alter table subject_group drop constraint FK6xmk79mni0ym06e6wsiycs7hi
Hibernate: drop table if exists group cascade
Hibernate: drop table if exists subject cascade
21-Apr-2018 00:37:52.520 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform HHH000389: Unsuccessful:  alter table subject_group drop constraint FK8v7h1pu0ewqq6v6nky8jfwh1l
21-Apr-2018 00:37:52.521 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform ОШИБКА: ограничение "fk8v7h1pu0ewqq6v6nky8jfwh1l" в таблице "subject_group" не существует
21-Apr-2018 00:37:52.522 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform HHH000389: Unsuccessful: drop table if exists group cascade
21-Apr-2018 00:37:52.522 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform ОШИБКА: ошибка синтаксиса (примерное положение: "group")
Позиция: 22
Hibernate: drop table if exists subject_group cascade
Hibernate: drop table if exists teacher cascade
Hibernate: create table group (id int8 not null, id_rasp int8, name varchar(255), primary key (id))
21-Apr-2018 00:37:52.531 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform HHH000389: Unsuccessful: create table group (id int8 not null, id_rasp int8, name varchar(255), primary key (id))
21-Apr-2018 00:37:52.531 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform ОШИБКА: ошибка синтаксиса (примерное положение: "group")
Позиция: 14
Hibernate: create table subject (id int8 not null, title varchar(255), type varchar(255), teacher_id int8, primary key (id))
Hibernate: create table subject_group (subject_id int8 not null, group_id int8 not null)
Hibernate: create table teacher (id int8 not null, first_name varchar(50) not null, id_rasp int4, last_name varchar(50) not null, login varchar(50), middle_name varchar(50), password varchar(50), primary key (id))
Hibernate: alter table subject add constraint FKdvgvxo0oxhxeepkkwug7vg4w4 foreign key (teacher_id) references teacher
21-Apr-2018 00:37:52.714 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform HHH000389: Unsuccessful: alter table subject_group add constraint FK8v7h1pu0ewqq6v6nky8jfwh1l foreign key (group_id) references group
21-Apr-2018 00:37:52.714 ERROR [RMI TCP Connection(76)-127.0.0.1] org.hibernate.tool.hbm2ddl.SchemaExport.perform ОШИБКА: ошибка синтаксиса (примерное положение: "group")
 Hibernate: alter table subject_group add constraint FK8v7h1pu0ewqq6v6nky8jfwh1l foreign key (group_id) references group
 Hibernate: alter table subject_group add constraint FK6xmk79mni0ym06e6wsiycs7hi foreign key (subject_id) references subject
Позиция: 104

Вот 1 класс (убрал лишние геттеры и сеттеры из кода для читаемости)

@Entity
@Table(name = "subject")
public class Subject {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private long id;
    @Column(name = "title")
    private String title;
    @Column(name = "type")
    private String type;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "teacher_id")
    @JsonBackReference
    private Teacher teacher;
    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "subject_group", 
               joinColumns = @JoinColumn(name = "subject_id"),
               inverseJoinColumns = @JoinColumn(name = "group_id"))
    private List<Group> groups = new ArrayList<>();
    public void addGroup(Group group) {
        groups.add(group);
        group.getSubjects().add(this);
    }
    public void removeGroup(Group group) {
        groups.remove(group);
        group.getSubjects().remove(this);
    }
    public List<Group> getGroups() {
        return groups;
    }
    public void setGroups(List<Group> groups) {
        this.groups = groups;
    }
    public Subject() {
    }
}

вот 2 класс:

@Entity
@Table(name = "group")
public class Group {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private long id;
    @Column(name = "name")
    private String name;
    @Column(name = "id_rasp")
    private long idRasp;
    @ManyToMany(mappedBy = "groups")
    private List<Subject> subjects = new ArrayList<>();
    public Group() {}
    public List<Subject> getSubjects() {
        return subjects;
    }
    public void setSubjects(List<Subject> subjects) {
        this.subjects = subjects;
    }
}

Собственно в чем может быть проблема?

Answer 1

group является зарезервированным словом в SQL и не может использоваться как имя таблицы или поля. Измените имя таблицы, должно помочь:

@Entity
@Table(name = "groups")
public class Group {
    ...
}
READ ALSO
Как вернуть размер изображения в байтах?

Как вернуть размер изображения в байтах?

Задача: разбить изображение на несколько частей по 200кбЧтобы знать, сколько должно быть таких частей, нужно знать размер изображения

200
Как создать несколько таблиц в Sqlite android?

Как создать несколько таблиц в Sqlite android?

Есть уже бд с таблицей Tasks(uuid, name, date, list(только что добавил столбец))Я хочу сделать, чтобы в последнем был uuid из другой таблицы Lists, где есть много...

188
Java FX вывести значение из TextField в консоль

Java FX вывести значение из TextField в консоль

Не пойму почему не работает

202
Создание копии существующего списка

Создание копии существующего списка

Добрый деньИмеется заполненный ArrayList (например list1)

197