Неожиданная таблица, созданная обновлением ddl-auto - PullRequest
2 голосов
/ 20 сентября 2019

У меня есть приложение весенней загрузки с этими двумя сущностями JPA, соединенными отношением «один ко многим».

@Entity
@Table(name = "todos")
public class ToDo {

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

    @Column
    private String description;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    @Column
    private LocalDate targetDate;

    public ToDo() {
    }

    // Constructors, getters, setter, etc.
}
@Entity
@Table(name = "users")
public class User {

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

    @Column(unique = true, nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    private List<ToDo> toDos = new ArrayList<>();

    // Constructors, getters, setter, etc.
}

Для такого рода отношений я ожидаю иметь только две таблицы, но Hibernate создатьтри.

Hibernate: create table todos (id  bigserial not null, description varchar(255), target_date date, user_id int8, primary key (id))
Hibernate: create table users (id  bigserial not null, password varchar(255) not null, username varchar(255) not null, primary key (id))
Hibernate: create table users_to_dos (user_id int8 not null, to_dos_id int8 not null)

Последний выглядит бесполезным.Почему это создало, и я мог предотвратить это?Может быть, что-то не так в коде?

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Поскольку в вашем списке дел в пользовательской сущности нет аннотации @JoinColumn, hibernate предполагает, что для этого есть дополнительная таблица сопоставления, и создает ее.

Добавьте аннотацию @JoinColumn к полю, и этоне будет создан

Подробнее о этом руководстве

0 голосов
/ 20 сентября 2019

Добавить mappedBy :

@OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true,
            mappedBy = "user"
          )
    private List<ToDo> toDos = new ArrayList<>();
0 голосов
/ 20 сентября 2019
@OneToMany(mappedBy="speciality",fetch = FetchType.LAZY)     
@JsonIgnore      
private Set<DepartmentMaster> departmentSpeciality; 
@ManyToOne(cascade = CascadeType.ALL)   
@JoinColumn(name="SPECALITY_ID")    
@JsonIgnore     
private SpecialityMaster speciality;

Попробуйте сделать так, как я. Я не думаю, что это должно создавать какие-либо проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...