小弟刚接触hibernate 再用其做个电子商务网站的时候碰到了问题
不清楚该如何才能设计好实体类
就拿订单类跟用户类来说吧
两者是有关系的  我该如何设计这2个实体类呢?
订单类属性:属性1---订单ID
           属性2---用户类(还是用户ID?)貌似订单类的属性有用户类的时候  如果save订单类到表里的时候  用户类也要被保存到表里面  但是这个用户已经是存在了的  这样就会出错
请问订单类的属性2是用户类好还是用户ID好?

解决方案 »

  1.   

    楼主不妨试下这么下
    User和Order是1:n的关系,也就是一个用户可有多个订单,而一个订单只属于一个用户
    public class User{
        private Long oid;//用hibernate时User类对应的数据库中表的主键
        private String uid;//user的id
        private Set orders = new HashSet();//用于存放订单的集合
    }
    public class Order{
        private Long oid;//用hibernate时Order类对应的数据库中表的主键
        private String orderid;//user的id
        private User owner;//表明订单是归那个用户所有
    }
    然在在做映射的时候做个级联。
    就哦壳了。
      

  2.   

    hibernate是根据表的结构来映射实体类的。也就是你数据库里表怎么设计的,实体类就是怎么映射,有多少字段都是根据表来的。(当然你先设计类然后到数据库也可以,个人习惯。实体类对应数据库的表这一点是不会变的。)所以你需要明确的是数据库表的设计。你说的至少需要两张表,订单表、用户表。
    订单表字段大概如下:订单ID、订单的时间、下单用户ID(和用户表内的用户ID关联)、订单的状态等其他相关订单内容的字段。用户表:用户ID、用户姓名、用户信息等等然后映射的时候一个用户类,一个订单类。你保存一个订单类,只是增加了订单表里的一条记录而已。这条记录中的字段下单用户ID就唯一表示了订单用户的信息了。
      

  3.   


    我最初的想法就是这样  但是在保存订单类的时候  订单类里的属性User是再保存一次?能不能看看你保存订单类的代码呢?
      

  4.   

    你做下级联
    order的mapping里如下       
           <many-to-one name="owner"
                        column="FID" />
                     
    user的mapping里如下
                
            <set name="accts" inverse="false">
               <key column="FID" />
               <one-to-many class="Account" />
            </set>          
                                 
     这个是关键的部分,其他的属性按正常走就好。
     保存就是获取一个Session s
     然后s.save(new order(属性))就好。          
      

  5.   

    还是写标注的好,XML文件写的不好看