Spring Boot JPA: многие ко многим относятся как к своему классу? - PullRequest
0 голосов
/ 20 марта 2020

Я работаю с Spring Boot и JPA, и у меня есть отношения многие ко многим между двумя таблицами. Эти отношения также должны иметь свои собственные атрибуты, поэтому мне пришлось сделать это отношение своим собственным классом. У меня также есть хранилища для всех классов. Кроме того, как мне правильно сопоставить внешние ключи при использовании не примитивных полей?

Мой вопрос: Как я понимаю это, так что загрузка Spring не дает мне ошибку? Я новичок в Spring Boot и JPA. Вот фрагмент кода ниже:

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

@Entity //this is a relationship type. Does an annotation for relationship types exist?
@Embeddable
@Getter
@Setter
@NoArgsConstructor
public class RelationshipType implements Serializable {

    @Id
    private Long id;

    @NotNull
    @JoinColumn(name="id")
    private Class1 class1;

    @NotNull
    @JoinColumn(name="code")
    private Class2 class2;


    private Integer anotherNumber;
}

1 Ответ

1 голос
/ 20 марта 2020

Это должно выглядеть примерно так, как показано ниже. Вам необходимо установить отношения с другими таблицами как @ManyToOne, чтобы получить желаемое @ManyToMany отношение между Сотрудником и Числом.

@Entity
@Getter
@Setter
@Table(name = "employees_numbers")
public class EmployeeNumber {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "employee_id", nullable = false)
    private Employee employee;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "number_id", nullable = false)
    private Number number;

    @Column(name = "extra_column", nullable = false)
    private String extraColumn;
}

Примечание: не используйте @NotEmpty для Integer. Он специально создан для коллекций.

Примечание 2: Я здесь go хромаю и скажу, что вы хотите добавить nullable = false к столбцам, а не помечать их как @NotNull. Между ними есть существенная разница.

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