Использование нескольких @OneToOne аннотаций Hibernate

86
21 января 2021, 23:00

У меня есть 3 сущности: Customer, User и VerificationEmail.

Между ними зависимость @OneToOne (bidirectional). Зависимость @OneToOne работает только с Customer -- User. Теперь я пытаюсь добавить зависимость Customer -- VerificationEmail, но я фейлюсь. Идея такова, что id VerificationEmail должен быть зависим от id Customer. То есть при сохранении объекта Customer, id у User, VerificationEmail должен наследоваться от Customer.

Customer.java:

@Table(name = "customer")
public class Customer {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private long id;
    @Column(name = "name")
    @NotEmpty(message = "*Please provide your name")
    private String name;
    @Column(name = "surname")
    @NotEmpty(message = "*Please provide your surname")
    private String surname;
    @OneToOne
    @MapsId
    @JoinColumn (name="customer_id")
    private User user;
    @OneToOne
    @MapsId
    VerificationEmail verificationEmail;
}

User.java:

@Table(name = "user")
public class User {
    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private long id;
    @Column(name = "email")
    private String email;
    @Column(name = "password")
    @NotEmpty(message = "*Please provide your password")
    private String password;
    @OneToOne
    private Customer customer;
}

VerificationEmail:

@Table(name = "email_verif")
public class VerificationEmail {
    @Id
    @GeneratedValue
    private Long id;
    @OneToOne(mappedBy = "email_verif", cascade = CascadeType.ALL,
            fetch = FetchType.LAZY, optional = false)
    private Customer customer;
    @Column
    private String token;
}
Answer 1

Попробуйте так:

Customer.java:

@Table(name = "customer")
public class Customer {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private long id;
    @Column(name = "name")
    @NotEmpty(message = "*Please provide your name")
    private String name;
    @Column(name = "surname")
    @NotEmpty(message = "*Please provide your surname")
    private String surname;
    @OneToOne
    @JoinColumn(name="userId")
    private User user;
    @OneToOne
    @JoinColumn(name="verificationEmailId")
    private VerificationEmail verificationEmail;
}

User.java:

@Table(name = "user")
public class User {
    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private long id;
    @Column(name = "email")
    private String email;
    @Column(name = "password")
    @NotEmpty(message = "*Please provide your password")
    private String password;
    @OneToOne(mappedBy = "user")
    private Customer customer;
}

VerificationEmail:

@Table(name = "email_verif")
public class VerificationEmail {
    @Id
    @GeneratedValue
    private Long id;
    @Column
    private String token;
    @OneToOne(mappedBy = "verificationEmail")
    private Customer customer;
}
READ ALSO
java Spring сервер не получает POST и PUT запросы из android

java Spring сервер не получает POST и PUT запросы из android

У меня есть простой север на Spring`е, что должен обрабатывать GET, PUT и POST запросы, и работать с БД соответственноС GET никаких проблем нет, и приложение...

104
Пробел в первой ячейке Excel (CSV)

Пробел в первой ячейке Excel (CSV)

При генерации csv файла и последующем его открытии в excel получаю ошибкуРешить ее удалось добавив в первую ячейку первым символом пробел

100
Что такое buckets или бакет?

Что такое buckets или бакет?

Смотрю картинку про хэш‑таблицу и вижу такое слово: bucketsПосоветуйте что это такое и для чего?

99
Хранение настроек

Хранение настроек

А где принято хранить настройки подключения к БД (путь, логин, пароль) в Java программах?

136