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);