使用hibernate插入一对多关系

时间:2011-05-02 11:16:03

标签: java hibernate

使用Hibernate插入数据的最佳方法是什么?作为一个例子,我不会在订单表中插入新订单。它与Item有一对多的关系。当我们在Object方式上考虑它时,Order对象具有Item集合。我是否需要填充Item对象集合中的所有变量(itemName,ItemId,ItemSize ,,)? 如果你能使用hibernate session在插入Order上给我代码示例..

2 个答案:

答案 0 :(得分:2)

@Entity
@Table(name="orders")
class Order {
@Id @GeneratedId private Long id;
@OneToMany(mappedBy="order")
private List<Item> items;

public Order() {
items = new ArrayList<Item>();
}

public void addItem(Item item) {
if (item != null)
items.add(item);
}
    /* getters setters */

}

和item:

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

查询:

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

要插入可能是这样的:

Session session = null;

    try {
       session = HibernateUtils.getSessionFactory().getCurrentSession();
       Transaction tx = session.beginTransaction();

       Order order = new Order();
       Item item = new Item();
       item.setQuantity(1);
       /* etc.. */
       order.addItem(item);
       item.setOrder(order);
       session.save(item);
       session.save(order);
       tx.commit();
    } finally {
       if (session.isOpen())
           session.close();
    }

答案 1 :(得分:0)

通常你应该创建你的Item对象并设置对Order的引用,因为在一般情况下Item是关系的拥有方(假设是双向关联,你不想使用映射表)

除此之外,您能否提供更多关于您已经拥有的信息(特别是您的订单和项目实体)或您的问题究竟在哪里?