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,如果没有就创建新的,只要提交自动关闭