好吧,我到现在又想明白了点,订单似乎是个业务逻辑,插入时候基本不能直接被SPRING装在好吧,只有在业务层先实现了插入日程才能得到日程对象的OID然后再插入订单。
但是订单对象也不是白做的,在取出订单时候应该可以一下装配好这个对象吧。尝试中。。晚些时候来再提问或者结贴。
才学完SSH2整合2天,不专业地方请大家多指导!!!

解决方案 »

  1.   

    网上这样的例子很多啊,都可以参考的。
    帮你找了两个:
    http://ryxxlong.iteye.com/blog/626416
    http://www.blogjava.net/wujun/archive/2006/04/08/39956.html
      

  2.   

    建议你看看hibernate文档最后的最佳实践,不建议使用多对多的,除非必要!
      

  3.   

    朋友是这样,举成我昨天试写的最简单的例子吧:用户
    小组一个用户可以在多个小组,一个小组可以有多个用户
    ===============================================
    数据库有users\user_group\groups三个表操作会进行如下:
    删除users表用户,同时去除user_group表和用户相关的记录,但是要能保留groups表对应组织;
    删除groups表组织,同时去除user_group表和组织相关的记录,但是要能保留users表用户;
    ===============================================
    这个我觉得是一个典型的多对多。现在我迷茫的一点是这样的:
    我可以自己写2个hbm,实现了中间表自动生成,但是在操作时候我自己只能实现部分操作,就是这个地方费解了。代码如下:
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="bean.Group" table="groups">

    <id name="id" column="id" type="long">
    <generator class="increment"></generator>
    </id>

    <property name="groupName" column="group_name" type="string"></property>

    <set name="users" table="user_group" cascade="save-update">
    <key column="group_id"></key>
    <many-to-many class="bean.User" column="user_id"></many-to-many>
    </set>

    </class></hibernate-mapping><?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="bean.User" table="users">

    <id name="id" column="id" type="long">
    <generator class="increment"></generator>
    </id>

    <property name="username" column="username" type="string"></property>
    <property name="password" column="password" type="string"></property>

    <set name="groups" table="user_group" cascade="save-update">
    <key column="user_id"></key>
    <many-to-many class="bean.Group" column="group_id"></many-to-many>
    </set>

    </class></hibernate-mapping>
     //添加数据:正确实现添加内容
     User user1 = new User();
     user1.setUsername("zhangsan");
     user1.setPassword("123456");

     Group group1 = new Group();
     group1.setGroupName("组一");

     user1.getGroups().add(group1);
     group1.getUsers().add(user1);  UserDAO userDAO = new UserDAOImpl();
     userDAO.save(user1); //测试二:删除用户,可以实现删除中间表记录
    // UserDAO userDAO = new UserDAOImpl();
    // User user1 = userDAO.findUserById(1);
    // userDAO.removeUser(user1);//测试三:删除组,不能删除组,也不会删除中间表相关记录
    // GroupDAO groupDAO = new GroupDAOImpl();
    // Group group1 = groupDAO.findGroupById(1);
    //
    // System.out.println(group1);
    //
    // groupDAO.removeGroup(group1);现在我的难点是在实际开发中这类问题是怎么处理的?
    因为我也可以不用hbm去管理这个关系,而只是管理每个对应模型的添删改查,然后在业务层去自己调用三个不同的dao去完成功能需求。
    这样做得话对我还很轻松,但是总觉得这样是不是有违hibernate的学习宗旨?
      

  4.   

    个人觉得完全没有必要配置这种关联关系。在存在关联关系的表中只保存彼此的id就可以了,需要用到的时候在根据id去获取关联的记录即可。
    另外6楼说有违hibernate的学习宗旨,这个真心没有。说真的,项目中是怎么简单快捷怎么来,如果你用hibernate反而比不用它更快更好,那你为什么非要用它呢,就因为你在项目中用了hibernate吗?工具是为了提高效率。就好比小明和小张两家相距10米元,彼此都有车,难道说就因为有车,所以必须开车去吗?
      

  5.   

    谢谢,我在官方文档查阅到了你说的那里,明白了!
    官方推荐:拆分成2个一对多,大多数时间需要再连接表中添加额外的信息。而这个提示页也正是我困惑的问题。
    至此,前面的问题也一样解决了!
    Do not use exotic association mappings:
    Practical test cases for real many-to-many associations are rare. Most of the time you need additional information stored in the "link table". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, most associations are one-to-many and many-to-one. For this reason, you should proceed cautiously when using any other association style.
      

  6.   

    恩,谢谢,我明白了,我先前认为的hibernate除了帮助完成对象存入数据库外,还要尽可能的在hbm中体现出来相互关系,并且交由hibernate代处理。现在虽然表达不出来,但是似乎更明白了点。
    ===========================================================
    之所以选择这个是因为才学习完SSH2整合,如果理不清这边的处理,写不好hbm文件,下步骤也没法把hbm文件作为资源放到spring配置文件中。我这半年来再寻找一种解决方案。之前的一年多时间里,自己写过不少可以说是几代代码。
    从开始的写前段HTML+CSS+JS开始
    到后来的维护中软、U8数据库SQL SERVER2000
    再到后来写ASP的后台,代码和语言混合的那种(到后期简直牵一发动全身,我自己写的自己都没法修改了)
    再后来看了部分PHP视频后,开始用简单的MVC模式写,但是太零散了(也许作为一门成熟的语言有其解决方案,只是我没坚持到吧)。
    再后来因为实行手机客户端,自己照葫芦画瓢的写了个android客户端给单位用(在其中的视频结实了Java这门语言),由于android客户端的存在,自己的工作范围再次扩大,多种语言的维护作为一个人来说很大程度上是我的负担了,同时自己也明白自己最擅长的是处理那块内容了。(前端不是我擅长的,因为自己属于完美主义的,在前端永远自己现在做得都无法满足自己想在想的,所以放弃;数据库那边说句不好听的话,万变不离其宗,也就那么多东西;所以最后就是业务块了)所以这半年在看Java教程中,我进一步定位了自己的位置,其它方面尽量用成熟的东西代替自己去做,在看完SSH2整合后可以说是兴奋的,因为终于找到自己重点了。