Я пытаюсь добавить функциональность количества товаров в мое приложение для покупок. У меня есть Order объект, который имеет Map , у которого есть ключи, которые являются Case объектами (например, футляр для музыкального оборудования), и значениями, которые они вводят store - это Integer , которые представляют количество этих дел в этом порядке.
Ранее Orders имели только Список из Случаи в отношениях @OneToMany, и они работали нормально, без проблем сохранялись в БД (без количественной функциональности). Объекты Order и Case имеют таблицы и объединяются в двух направлениях.
Теперь я хотел добавить Соединительную таблицу , которая состояла из Order_id, Case_id и количества (дела в заказе). Я видел много примеров, но большинство из них имеют простой ключ и значение как объект (в отличие от того, что у меня есть), и ключ в большинстве случаев ссылается на параметр значения (что не является моим случаем).
В настоящее время я получаю исключение org.hibernate.TransientObjectException, поскольку я не сохраняю объект Case . Я, вероятно, даже не отображаю это правильно. Я довольно растерялся относительно того, как использовать аннотации в моем конкретном случае c. Вот код:
Заказ
@Proxy(lazy=false) // test
@Table(name="orders")
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
// @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@ElementCollection
@JoinTable(name="quantities",
joinColumns = {@JoinColumn(name="order_id", referencedColumnName="id")}
// ,
// inverseJoinColumns = {@JoinColumn(name="case_id", referencedColumnName="id")}
)
@MapKeyJoinColumn(name="case", referencedColumnName = "id")
@Column(name="quantity")
private Map<Case, Integer> cases;
(...)
Корпус
@Proxy(lazy=false)
@Table(name="cases")
public class Case {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
(...)
@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name="order_id")
private Order order;