Hibernate Аннотации / JPA картографические коллекции - PullRequest
2 голосов
/ 01 мая 2011

Моя проблема связана с отображением коллекций с помощью аннотаций JPA в Hibernate. Скажем, у меня есть сущность:

@Entity
@Table(name="orders")
class Order {
@Id @GeneratedId private Long id;
@OneToMany(fetch=FetchType.EAGER, targetEntity=Item.class)
@JoinColumn(name="order_id")
private List<Item> items;
/* getters setters */
}

и мой предмет:

@Entity
@Table(name="items")
class Item {
@Id @GeneratedId private Long id;
@ManyToOne
@JoinColumn(name="order_id")
private Order order;
/* getters setters */
}

order_id - это внешний ключ в таблице товаров, который ссылается на заказ с этим идентификатором. если у меня есть 3 элемента для заказа в таблице элементов, я получаю объект с тремя заказами вместо одного с тремя элементами в коллекции элементов, если я запрашиваю с помощью:

Query query = query.createQuery("from Order o where o.id=:id");
query.setLong("id", 1234L);
List<Order> orders = query.list();

query.list () возвращает три экземпляра заказа. Как я могу сопоставить такие базовые коллекции с hibernate 3.5.x? Результат list () похож на результат, возвращаемый оператором SQL в БД. Как я могу сказать Hibernate / JPA, что он должен вернуть один объект заказа с тремя элементами в коллекции?

Спасибо всем

ОБНОВЛЕНИЕ: ассоциация является однонаправленной. это означает, что в таблице заказов нет информации о товарах.

1 Ответ

4 голосов
/ 01 мая 2011

Необходимо указать mappedBy и удалить @JoinColumn в классе заказа:

@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue
private Long id;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "order")
private List<Item> items;

// accessors
}


@Entity
@Table(name = "items")
public class Item {
@Id
@GeneratedValue
private Long id;

@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
    // accessors
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...