2014-01-07 4 views
0

Я пытаюсь сопоставить объекты, так что я буду иметь следующий или подобный эффект (предпочтительно без OrderItem.quantity):Hibernate список отображения

enter image description here

Вот моя сущность:

public class Orders implements Serializable { 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 
@ManyToOne 
private UserCreds user; 
@OneToMany 
private List<Item> orderedItems; 

В итоге я столкнулся с таблицей соединений OrdersItem с двумя столбцами: item_id и order_id, оба являются ключами , таким образом, это не позволит мне сохранить порядок с повторяющимися элементами. Добавление столбца ID для ТоварыЗаказа должен сделать трюк:

OrdersItem table that I except: 
| ID | ORDER_ID | ITEM_ID 
    1 25   31 
    2 25   31 
    3 25   12 
    4 25   12 
    5 25   62 

и т.д .. Но я просто не мог получить, что работает, или, может быть, мое решение совершенно неправильно?

ответ

0

Использование коллекции элементов здесь может быть лучшим вариантом. Коллекция элементов хорошо работает для обеспечения отношений с атрибутами.

Это может выглядеть в вашем Orders классе:

@ElementCollection 
private Map<Item, Integer> itemQuantities = new HashMap<Item, Integer>(); 

EDIT: Вы можете использовать @ElementCollection когда значения типа Map является основным типом или Embeddable. Integer - это базовый тип.

Если вы решили использовать объект как значения типа Map, вы должны использовать @OneToMany или @ManyToMany

ключа типа не имеет никакого влияния на выборе аннотаций в этом случае, так что вы может использовать Item или Long в качестве ключа без изменения аннотации. Это, однако, влияет на аннотации физического отображения, которые вы можете использовать.

+0

«В спецификации JPA 2.0 четко указано, что @ ElementCollection для базовых типов и вложений», и я думаю, что мне нужны оба класса как @ Entity. Следующее решение приводит к org.hibernate.AnnotationException: использование @ OneToMany или @ ManyToMany для таргетинга на неотображенный класс: Entity.Orders.itemQuantities [java.lang.Integer] (targetClass) не поможет – stzmk

+0

Не совсем, см. Редактирование – kostja

Смежные вопросы