Thắc mắc về quan hệ @OneToOne trong Spring JPA
Chào mn, hiện tại e đang bị vướng 1 chỗ trong việc mapping các quan hệ trong JPA, mong mn giúp đỡ.
Bài toán: 1 Customer có 1 Account và 1 Account thuộc về 1 Customer.
Lớp Account.java
@Id
@Column(name = "account_id")
private String accountId;
@OneToOne(mappedBy = "account", cascade = CascadeType.ALL)
private Customer customer;
@Column(name = "type_account")
private String typeAccount;
Lớp Customer.java
@Id
@Column(name = "customer_id")
private String customerId;
@Column(name = "name")
private String name;
// đoạn này e để nhằm ràng buộc thằng accountId phải là khóa ngoại,
//kiểm soat Json đưa vào nhưng không biết có cách nào
// tốt hơn không vì cái này nó phải truy xuất dữ liệu 2 lần thì phải?
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "account_id", updatable = false, insertable = false)
private Account account;
@Column(name = "account_id")
private String accountId;
Vấn đề của e là bây giờ nhập dữ liệu cho Customer, và e muốn đưa Json vào có 1 field là accountId( kiểu dữ liệu bắt buộc phải là String, không phải là Object). Vậy là sao để có thể kiểm soát được là accountId phải là khóa ngoại của thằng Account. Không biết cách làm trên của e đã tối ưu chưa hay có cách nào hay hơn không. Vì lúc e xóa 1 thăng customer thì bị xóa luôn cả account, trong khi e không muốn chuyện đó xảy ra. Mặc dù chuyển CascadeType.ALL về .PERSIST nhưng lúc đó thì nó chả xóa được record nào luôn. Thanks mn