'Basic' attribute type should not be a container
Все было нормально, пока не стал добавлять аннотации для Sptring-MVC. Все поля, в том числе и поле List не сообщали о какой-либо ошибке. В чем может быть проблема? В паутине есть вариант с тем, чтобы добавить *@Basic* на переменной, но это не помогает, так же как и *@OneToMany*.
@Getter
@Setter
@Entity
public class Customer extends User {
public Customer(){ // Пустой конструктор для Hibernate
}
public Customer(String name, String lastName){ // Пользовательский конструктор создается,
super(name, lastName); // когда нам нужно создать новый экземпляр,
} // но у нас еще нет ID.
// Поля
private @Id @GeneratedValue Long id;
private double wallet;
private List<Order> orderList;// ПОДЧЕРКИВАЕТ КРАСНЫМ И ПИШЕТ 'Basic' attribute type should not be a container
// Методы
public void depositMoney(){// Внести деньги на счет
}
public void withdrawMoney(){// Вывести деньги со счета
}
public void makeOrder(){// Сделать заказ
}
}
Ответы (1 шт):
OneToMany работает только с entity.
Соответственно, Вам нужно из Order тоже сделать сущность.
Допустим, у Вас две entity: Customer и Order, между которыми связть типа один-ко-многим(one-to-many), Вам нужно указать hibernate на это. Для этого в классе Customer поле orderList будет выглядеть как-то так:
@OneToMany(mappedBy = "customer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonManagedReference
private List<Order> orderList;
Тогда в сущности Order нужно сделать поле:
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JsonBackReference
private Customer customer;
А теперь по порядку - OneToMany и ManyToOne указывают на тип связи между двумя сущностями.
fetch type - советую почитать про это отдельно, грубо говоря - это то как hibernate будет получать данные.
cascade type - там много составных параметров,если all - то объекты каскадно сохраняютс, удаляются, обновляются и т.д.
@JsonBackReference и @JsonManagedReference - аннотации, нужные чтобы избежать бесконечной рекурсии(в Customer есть список Order в каждом из Order есть Customer в котором список Order...) тут же обратная ссылка в случае зависимого поля(private Customer customer) заменяется на customer_id