У меня есть 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;
}
Попробуйте так:
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;
}
Продвижение своими сайтами как стратегия роста и независимости