繁体   English   中英

Hibernate 注释/JPA 映射 collections

[英]Hibernate Annotations/JPA mapping collections

我的问题是关于在 Hibernate 中将 collections 与 JPA 注释映射。 说,我有一个实体:

@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 是 items 表中的外键,它引用具有该 id 的订单。 如果我在 items 表中有 3 个订单的订单,我会得到三个订单 object 而不是一个在 items 集合中包含三个项目,如果我查询:

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 map 这样基本的 collections? list() 的结果类似于 DB 上的 SQL 语句返回的结果。 我怎么能说 Hibernate/JPA,它应该返回一个订单 object,其中包含三个项目?

谢谢你们

更新:关联是单向的。 这意味着,订单表没有关于项目的信息。

您需要指定 mappedBy,并删除订单 class 上的 @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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM