码迷,mamicode.com
首页 > Web开发 > 详细

[Hibernate] One-To-Many

时间:2018-06-27 22:28:18      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:etc   技术分享   action   图片   str   begin   ems   需要   集合   

  一对多需要在一的类配置多的类的set泛型集合.

  多的一端需要添加一的类作为属性,其和数据库对应的是对应表的主键.

一个购物车有多个商品,购物车有个cart_id作为主键,商品除了自己的items_id作为主键外,还有一个cart_id作为外键.

 

需要在Cart类中声明一个Set<Item> items,在Items类中声明一个Cart cart属性.

 

在配置文件Cart.hbm.xml中配置

set>name=集合名 table=表名

key>column> name=外键

one-to-many> class=类名

技术分享图片

在items.hbm.xml中配置

技术分享图片

添加处理:

public static void main(String[] args) {

        Cart cart = new Cart();
        cart.setName("MyCart");
        
        Items item1 = new Items("I1", 10, 1, cart);
        Items item2 = new Items("I2", 20, 2, cart);
        Set<Items> itemsSet = new HashSet<Items>();
        itemsSet.add(item1); itemsSet.add(item2);
        
        cart.setItems(itemsSet);
        cart.setTotal(10*1 + 20*2);
        
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
        //Get Session
        sessionFactory = HibernateUtil.getSessionFactory();
        session = sessionFactory.getCurrentSession();
        System.out.println("Session created");
        //start transaction
        tx = session.beginTransaction();
        
        //Save the Model objects
        session.save(cart);
        session.save(item1);
        session.save(item2);

        tx.commit();
        if(!sessionFactory.isClosed()){
            sessionFactory.close();
        }}}

因为Cart实体类中没有声明构造函数,所以只能通过默认构造函数Cart cart=new Cart();

然后set属性来实现增加Cart对象.

 

其中set属性的顺序只要在save在save之前即可.记得要setItems(itemsSet);

需要同时save cart和item1,item2.

然后提交.

虽然item的主键和外键都没有指定,但其主键在配置文件中如:

技术分享图片

所以实现了自增.

hibernate帮助将其外键对应的cart_id添加到外键column上.

 

[Hibernate] One-To-Many

标签:etc   技术分享   action   图片   str   begin   ems   需要   集合   

原文地址:https://www.cnblogs.com/zienzir/p/9235999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!