标签:主键生成策略 情况 方法 关联 int integer ber 指定 策略
1 实体类里面属性私有的
2 私有属性使用公开的set和get方法操作
3 要求实体类有属性作为唯一值(一般使用id值)
4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
(1)八个基本数据类型对应的包装类
- int – Integer
- char—Character、
- 其他的都是首字母大写 比如 double – Double
(2)比如 表示学生的分数,假如 int score;
- 比如学生得了0分 ,int score = 0;
- 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试
** 解决:使用包装类可以了, Integer score = 0,表示学生得了0分,
** 表示学生没有参加考试,Integer score = null;
1 hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略
2 hibernate主键生成策略有很多的值
native
native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence。
<id name="id" column="id"> <generator class="native" /> </id>
例如MySQL使用identity,Oracle使用sequence
注意:如果Hibernate自动选择sequence或者hilo,则所有的表的主键都会从Hibernate默认的sequence或hilo表中取。并且,有的数据库对于默认情况主键生成测试的支持,效率并不是很高。
使用sequence或hilo时,可以加入参数,指定sequence名称或hi值表名称等,如
<param name="sequence">hibernate_id</param>
特点:根据数据库自动选择,项目中如果用到多个数据库时,可以使用这种方式,使用时需要设置表的自增字段或建立序列,建立表等。
UUID:Universally Unique Identifier,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字,标准的UUID格式为:
xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。
<id name="id" column="id"> <generator class="uuid" /> </id>
Hibernate在保存对象时,生成一个UUID字符串作为主键,保证了唯一性,但其并无任何业务逻辑意义,只能作为主键,唯一缺点长度较大,32位(Hibernate将UUID中间的“-”删除了)的字符串,占用存储空间大,但是有两个很重要的优点,Hibernate在维护主键时,不用去数据库查询,从而提高效率,而且它是跨数据库的,以后切换数据库极其方便。
特点:uuid长度大,占用空间大,跨数据库,不用访问数据库就生成主键值,所以效率高且能保证唯一性,移植非常方便,推荐使用。
使用uuid生成策略,实体类id属性类型 必须 字符串类型
调用session里面的get方法实现
User user = session.get(User.class, 2); System.out.println(user);
首先查询,修改值
***根据id查询,返回对象
User user = session.get(User.class, 2); user.setUsername("欧阳"); session.update(user); tx.commit();
调用session里面delete方法实现
User user = session.get(User.class, 2); session.delete(user);
1 实体类状态有三种
(1)瞬时态:对象里面没有id值,对象与session没有关联
User user = new User(); user.setUsername("qew"); user.setPassword("12r33"); user.setAddress("加3q");
(2)持久态:对象里面有id值,对象与session关联
User user = session.get(User.class, 2);
(3)托管态:对象有id值,对象与session没有关联
User user = new User(); user.setUid(1);
2 演示操作实体类对象的方法
(1)saveOrUpdate方法:实现添加、实现修改
User user = new User(); user.setUsername("大大王"); user.setPassword("123"); user.setAddress("阿尔巴尼亚"); //实体类对象是瞬时态,做添加 session.saveOrUpdate(user);
User user = new User(); user.setUid(3); user.setUsername("2大王"); user.setPassword("1w23"); user.setAddress("阿尔巴a"); //实体类对象是托管态,做修改 session.saveOrUpdate(user);
User user = session.get(User.class, 4); user.setUsername("3大王"); user.setPassword("qew3"); user.setAddress("阿qwe巴a"); //实体类对象是持久态,做修改 session.saveOrUpdate(user);
标签:主键生成策略 情况 方法 关联 int integer ber 指定 策略
原文地址:https://www.cnblogs.com/kpsmile/p/10047937.html