hibernate的三种状态和表的关系

hibernate有 持久态,游离态,自由态

表的关系:一对一,一对多,多对多

持久态:session空间中有这个对象(该对象纳入了session的管理范围),数据库中有与之对应的数据
             持久态的数据 对象中的属性值与数据库中的数据保持一致 ,如果不一致会发生同步更新 发送修改语句

自由态:session空间中没有这个对象(该对象没有纳入了session的管理范围),数据库中也没有与之对应的数据

              Student s=new Student();新new的对象就是自由态的数据库没有相对应的数据session中也没有。

游离态:session空间中没有这个对象(该对象没有纳入了session的管理范围),数据库中有与之对应的数据

           //游离态测试
           Student s=new Student();
           //将对象踢出session
           session.evict(s);

一对一表关系:(一个钥匙对应一扇门,一个身份证对应一个人)我们有时候要对两张表进行操作的时候这个时候就要用到这个了

现在我们以user和card两张表进行实例  一张用户表一张卡表

准备工作:创建实体类的包和对应的实体类还有对应实体类的hbl.xml文件

这个时候他们两张表还是没有关系的我们现在要给他们加上关系,首先要先在实体类的加一个属性比如 user表的实体类中加 一个card的属性,在card里加一个user的属性并提供get set的方法,然后在映射文件中也要做相应的更改

这个是user表的

 

这个是card表

 

然后还有一步

 

因为卡的id不是自增的然后也需要和用户表有关联。

还有一步就是现在已经是有联系了但操作的话还有点麻烦

这是一个添加你看还要添加两个对象是不是有点麻烦,所有一步是级联,在实体类映射文件里以哪个为主就在哪个的映射文件的加上cascade这个属性里面的那个all是全部的意思 也可以写delete....

接下来就是一些操作了

/*Users u=session.get(Users.class,1);
        System.out.println(u.getCard().getCnumber());*/
        
        //添加数据 用户信息和卡的信息 添加之后一一对应
        /*Users u=new Users("admin1");
        
        Card c=new Card("431111111111111");
        //相互设置  互设
        u.setCard(c);
        c.setUsers(u);
        
        session.save(u);//级联操作
*/        //session.save(c);
        
        
        //找到一个人同时找到这个人的卡
        /*Users u=session.get(Users.class, 1);
        System.out.println(u.getCard());*/
        
        //查询一张卡的同时查询该卡的用户
        /*Card c=session.get(Card.class, 1);
        System.out.println(c.getUsers().getUname());*/
        
        
        //删除一个用户同时删除用户的卡
        /*Users u=session.get(Users.class, 1);
        session.delete(u);//级联操作 删除卡*/
        
        //删除一张卡
        /*Card c=session.get(Card.class, 4);
        //断绝关系
        //c.getUsers().setCard(null);
        //将级联的对象踢出session的管理范围
        Users u=c.getUsers();
        session.evict(u);
        
        session.delete(c);*/
        
        //给用户添加一张新的卡
        /*Users u=session.get(Users.class, 2);
        Card c=new Card("11111111111111");
        u.setCard(c);
        c.setUsers(u);
        
        session.save(c);*/
        
        /*//给老卡添加一个新人 no
        Card c=session.get(Card.class, 8);
        Users u=new Users("aaa");
        u.setCard(c);
        c.setUsers(u);
        session.save(u);*/
        
        /*Card c=session.get(Card.class, 5);
        c.getUsers().setUname("小强");
        session.update(c);
        */
        
        //删除一个用户不删除卡
        Users u=session.get(Users.class, 5);
        u.setCard(null);
        session.delete(u);
         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值