У меня есть два класса, Customer и ShoppingCart.Java-структура двух классов выглядит следующим образом:
Класс клиента:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Customer extends User implements Serializable {
@OneToOne(mappedBy = "owner", cascade=CascadeType.ALL)
private ShoppingCart shoppingCart;
@OneToMany(mappedBy = "customer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Purchase> purchases;
public Customer() {
super();
}
public Customer(String username, String email, String password) {
super(username, email, password);
this.shoppingCart = new ShoppingCart();
this.purchases = new ArrayList<>();
}
getters and setters
}
Класс ShoppingCart:
@Entity
public class ShoppingCart implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer shoppingCartId;
@OneToOne
@JoinColumn(name = "owner_id")
private Customer owner;
@OneToMany(mappedBy = "shoppingCart")
private List<CartItem> items;
public ShoppingCart(Customer owner) {
this.owner = owner;
this.items = new ArrayList<>();
}
public ShoppingCart() {
this.items = new ArrayList<>();
}
getters and setters
}
При необходимости это класс User:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer userId;
private String username;
private String email;
private String password;
public User() {
}
public User(String username, String email, String password) {
this.username = username;
this.email = email;
this.password = password;
}
getters and setters
}
Я настроил классы репозиториев следующим образом:
@Repository
public interface CustomerRepository extends CrudRepository<Customer, Integer> {
}
@Repository
public interface UserRepository extends CrudRepository<User, Integer> {
}
@Repository
public interface ShoppingCartRepository extends CrudRepository<ShoppingCart, Integer> {
}
То, что я хочу, - это просто, когда я создаю Customer, я также хочу создать кортеж ShoppingCart внутрибаза данных.И это на самом деле работает нормально, единственная проблема заключается в том, что внешний ключ ShoppingCart, связанный с Клиентом, имеет значение null.У меня просто атрибут shopping_cart_id установлен в целочисленное значение (правильно).
Код, который я использовал для проверки, следующий:
Customer customer = new Customer("stefanosambruna", "ste23s@hotmail.it", "*******");
customerRepository.save(customer);
Возможно, я поместил некоторые аннотации в неправильных местах, но я действительно не знаю, какие именно.Это связано с конструкторами?Или в конфигурации @JoinColumn и mappedBy?Я прочитал все вопросы и ответы по этой теме здесь, в StackOverflow и в некоторых других источниках, но я не нашел ничего 100% полезного.Надеюсь, что дал все необходимые детали.