generator

id生成策略: assigned:手动的生成id. increment:oracle mysql 都可以用 identity: id是字符型的 大小一定要大于32位 sequence:oracle可以特有的,mysql不支持sequence 语法:create sequence sequence_name start with 1 increment by 2;(按两个字节增长) hilo: 最大值有自己的算法 跨数据库的 seqhilo: oracle可以用 mysql不支持 uuid: guid: native: 默认的是使用叫 hibernate_sequence 这个名字的 sequence(oracle中)插入的数据有点好玩 select: foreign: -------------------------------------------------------------------------------------------------------------------- 1.native 对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制), native就是将主键的生成工作交由数据库完成,hibernate不管(很常用) 2.Assigned 在插入数据的时候主键由用户自己添加,hibernate也不管(很常用) 3.increment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器, 所以在多个实例运行的时候不能使用这个方法 4.sequence 调用数据库的sequence来生成主键,要设定序列名,不然hibernate无法找到: sequence_name(Oracle中很常用) 5.identity 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段, 要设定sequence(MySQL 和 SQL Server 中很常用) 6.hilo 使用hilo生成策略,要在数据库中建立一张额外的表,默认表名为hibernate_unique_key,默认字段为integer类型, 名称是next_hi(比较少用)我们也可以自己设置自定义的表名和字段名 7.sehilo 通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持 Sequence 的数据库,如 Oracle(比较少用) 8.uuid.hex hibernate会算出一个128位的唯一值插入 9.uuid.string hibernate会算出一个16位的值插入 10.foreign 使用外部表的字段作为主键 11.select 使用触发器生成主键(主要用于早期的数据库主键生成机制,少用) -------------------------------------------------------------------------------------------------------------------------- load()方法是假定你所读取的对象是肯定存在的... 而get则是尝试访问..如果没有则返回null.而load就会抛出Exception cant load ... 个人认为这两个方法唯一的区别就是为了实现不同的业务需要...从src上看性能是一样的。 get是直接查询数据库,如果查不到就返回null。 Load会首先从内存中装载,如果以前没有装载或查询出来,才开始查询数据库,某些情况下效率会高一点。 如果类是通过代理映射的,load()方法会返回一个对象,这是一个未初始化的代理,并且直到你调用该对象的某 方法时才会去访问数据库,如果数据库中并不存在这条数据,而你去使用它的方法必然会抛出异常,所以你得在使用到这个对象的各处捕获异常,使用起来相对麻烦。但这是使用了代理的情况,如果没有使用代理,只是简单的load,那查不到数据就会抛出异常了。第二种答案: hibernate中session.get/load方法都能通过指定实体类名和id从数据库中读取指定的记录,并且返回与之对映的实体对象。但是它们也有很大的区别 1)如果没有找到符合条件的数据get方法返回的是null,而load方法会抛出一个objectnotfoundexpection的异常。 2)load方法可以返回实体的代理类实例,而get方法直接返回实体。 3)load方法可以充分在一级缓存和二级缓存中查找现有的数据,而get方法则只在一级缓存查找,如果没有发现就直接调用sql在数据库中查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值