hibernate

1、实现原理

          反射,class找方法getMethod,invoke()

2、hibernate对象的三种状态

          瞬态:new新建的对象,没有id,在内存中有用 (delete)

          持久化:(save,update,getload)有id

          失活状态:(colse,clean,evict)

3、hibernate注解

          @Lob   针对Blob/Byte[]二进制数据/Clob大文本数据
          @Column(name="image",columnDefinition="Blob",nullable=true)
          @column(name="textstr",columnDefinition="Clob",nullable=true)

          @Id
          @GeneratedValue(generator = "paymentableGenerator")
          @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
          @Column(name ="ID",nullable=false,length=32)

          @Entity
          @Table(name="T_KS_ALARMINFO")
          @DynamicInsert(true)
          @DynamicUpdate(true)
          @SuppressWarnings("serial")

          @Column(precidion=6一共六位,scale=5保留5位小数,length="25",nullable="false",unique="true",columnDefinitior原生)

          @Temporal默认时间类型是date,如果修改TemporalType.Time;TemporalType.Date只显示天数

          @basic默认的(fetch=FetchType.EAGER)急加载,LAZY懒加载

4、对象关系

         @MangToOne多对一
         @JoinColumn(name="名")

          @OneToMany一对多
          @JoinColumn(name="deptid")必写,不写会变成多对多

          @ManyToOne双相多对一
          @JoinColumn(name="deptid")
          @OneToMany(mappedBy="dept")

          @OneToOne双向一对一基于外键的
          @JoinColumn(name="deptid" unique=true唯一)
          @OneToOne(mappedBy="dept")

          @OneToOne基于主键的一对一
          @PrimaryKeyJoinColumn()

         @ManyToMany多对多
         @JoinTable(name="temp-job",joinColumns={@JoinColumn(name="empi")},inverseJoinColumns=                                                               {@JoinColum(name="jobid")})用数组是因为可能是联合主键

         @ManyToMany(mapped="jobs")双向多对多,双向保留集合

5、fetch和查询有关

         查询策略:lazy,eager,多默认让eager,-lazy        OneToMany或ManyToOne的属性

6、cascade级联,操作一个对象和它关联的其他对象,是否会一起操作

        @OneToMany(mappedBy="dept" cascade=cascadeType.All针对所有)         persist针对添加     remove删除

7、缓存Cache

       一级缓存:session级别的缓存,自动带着没法关闭,refresh刷新,flush刷新缓存中,evict针对对象,clear清空

       二级缓存:sessionFactory级别的缓存,是插件,可以配置,数据不经常改变,可能频繁使用,偶尔出现并发,权限可以放

              @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)

              usage代表的缓存策略,可读写,region指定echcache.xml配置的cache引用

8、事务的隔离级别和hibernate的锁

        并发问题归为以下几类

              丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖

              脏读:一个事务读到另一个未提交的更新数据

              不可重复读:一个事务读到另一个事务已提交的更新数据

              覆盖更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的数据

              虚读(幻读):一个事务读到另一个事务已提交的新插入的数据

      数据库提供了四种事务隔离级别供用户选择

             Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新(不允许别的事务并发执行)

             Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他事                         务对已有记录的更新(避免重复读MySQL)

             Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已提交的新插入的记录,而且能看到其他已                           经提交的对已有记录的更新

             Read Uncommitted(读未提交数据):一个事务执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他                         事务没有提交的读已有记录的更新(允许脏读发生)

9、hibernate的锁:lockModle

             乐观锁:对一条数据,加了一个版本@version 

             悲观锁:se.ger(user.class,1,lockOptions.UPGRADE);

10、crrentSession和openSession和thread

             openSession每次都打开一个新的session,必须关闭se.close()

             currentSession获取最近的session,如果没有就创建新的,只要提交自动关闭

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值