我写的查询所有订单信息,根据订单信息查出这个用户的信息,这是没有问题。当我删除一个用户的时候,用cascade="delete" 订单也都删除了。我想删除的时候订单不删除。只删除用户。(到这步能实现)读所有订单的时候能不读出用户信息,用什么去控制?我在项目中,订单是一直要保存的,但是用户是可以删除的。而,当我删除一个用户的时候,后台查询订单就会报空指针异常。根本就无法传到前台去判断。请高手,帮帮忙 啊…………谢谢!!!!

解决方案 »

  1.   

    是的。谢谢,不过,现在就是不能改了。hibenrate有没有属性可以设置 能查出来,如果,用户没有。
    就不用查用户了。它从数据库中读出来订单的时候 如果,没有用户就会它就直接报异常了。我不止是这样的一两个实体要这样。要改动会改很多地方。开始设计就没有设计好。我也没有办法啊……  狂晕的……
      

  2.   


    你把用户对象改为用户的ID标识就行例如
    public class User {
       private int id;
    }public class Order {
       private int id;   pirvate int userId; //虚拟外键
    }表结构不用改 就改变一个配置文件 将
    <many-to-one name="user"/>
    改成
    <property name="userId" column="原始表的外键字段"/>最后要记住把原始表的外键约束一定要删除!
    alter table 表明 drop 约束名;
      

  3.   

    可以把定单-用户
    many-to-one中加上lazy=true试试,或cascade=none
      

  4.   

    前提是你不能用order.getUser()来取userId了。若要用,只能加个字段了
      

  5.   

    试试用hql解决。你的订单pojo需要有包含全字段的构造器,用户pojo需要有仅包含id的构造器,hql这样写
    select new Order(o.字段A,o.字段B,...,new Customer(o.customer.id)) from Order o
    如果你Order关联的Customer是懒加载的,这样因该不会空指针了。
      

  6.   

    一对多没问题,继续用!
    删用户不删订单>>不要做用户到订单的级联删除,即cascadeType中不要包含delete或是all。
    删掉用户后订单报空>>因为你订单加载的时候会去加载它所对应的用户对象,但是你已经删除了,但让会报错。所以,当你删除用户的时候,还要做一步关键的操作,将它对应的订单中的用户全部拿掉。所以这还需要你订单中用户id是可空的。
    明白没?
      

  7.   


    错是从数据库报出来的,在hibernate操作数据库的时候就报错来了。还由不得你去判断呢!!
      

  8.   

    你是指不能添加了?应该不会啊,你one-to-many那边是怎么配置的?cascade可不能也是none啊
      

  9.   


    如果,这样的话,save的时候会报session close!