Вы должны определить, какую информацию о ShoppingCart
вы хотите сохранить.
В сущности JPA (которую вы называете «сущностью в EJB 3») вы можете хранить:
- простые поля (строки, целые и т. Д.),
- встраиваемые объекты (объекты, хранящиеся в БД, но без постоянной идентичности - другими словами - без "id"),
- отношения с другими сущностями,
- любой объект, который сериализуем.
Похоже, ваше дело решается с помощью третьего или четвертого варианта.
Хранение сериализуемого объекта
Если вы хотите просто сохранить весь объект целиком, вы должны добавить implements Serializable
к вашему ShoppingCar
, и он должен быть правильно сохранен в базе данных.
Тем не менее, он будет сохранен с использованием Java Serialization (так что это будет двоичное представление объекта, переданного во время сохранения). Это довольно необычный способ достижения вашей цели.
Использование связей сущностей
Рассматривали ли вы сделать ShoppingCart
сущностью? Таким образом, вы можете использовать отношения и сохранять весь объект при сохранении объекта Reservation
, т.е.
@Entity
public class Reservation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne
private ShoppingCart cart;
// ...
}
В приведенном выше примере предполагается, что ровно один Reservation
будет связан с ровно одним ShoppingCart
.
Другим способом достижения вашей цели является расширение сущности Reservation
и добавление полей для заказанных продуктов, т. Е .:
@Entity
public class Reservation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ElementCollection
private Map<DVD, Integer> items;
}
Обратите внимание на использование Map
в качестве интерфейса вместо HashMap
, который всегда предпочтителен (если не требуется JPA.) Также обратите внимание, что в одной структуре вы можете хранить как элемент, так и его количество, купленное пользователь.
Помните, что в этом примере DVD
должен быть сущностью (что вполне разумно, поскольку вы, вероятно, будете хранить все свои предметы в базе данных).