五:Hibernate主键(ID)的生成策略 (重点掌握AUTO)
使用xml的配置:<id name="" ><generator name="native"/></id>
常用的四个:native,identity,sequence,uuid
使用注解的配置:@GeneratedValue
1)自定义ID 使用@Id
2)AUTO
方法1:@Id @GeneratedValue
方法2:@Id @GeneratedValue(strategy=GenerationType.AUTO)
使用java的数据类型和数据库的数据类型对应值自动生成数据库表中的主键
一般默认,对MYSQL,使用auto_increment,对oracle使用了hibernate_sequence(名称固定)
3)IDENTITY
@GeneratedValue(strategy=GenerationType.IDENTITY) mysql,sqlserver
4)SEQUENCE (@Sequencegenerator)
@SequenceGenerator(
name="SEQ_SHOPCONFIG", //此Sequence Generator的名称
sequenceName="SEQ_DB_SHOP_CONFIG" //存储到数据库的SEQUENCE的名称 使用于oracle
)
@GeneratedValue(strategy=GenerationType.SEQUENCE) oracle
javax.persistence.sequencegenerator
@SequenceGenerator(name="生成器名称",sequenceName="生成器数据库名称")
在get方法上面使用@GeneratorValue(stragegy=GeneraterType.SEQUENCE,name="生成器名称")
5)TABLE (@TableGenerator)
@TableGenerator(
name="TBL_SHOPCONFIG",
table="GENERATOR_TABLE",
pkColumnName = "key",
valueColumnName = "value",
pkColumnValue="SHOPCONFIG",
allocationSize=1
)
@Entity
@Table(name="shop_config")
@Id @GeneratedValue(strategy=GenerationType.TABLE,generator="TBL_SHOPCONFIG") oracle
6)联合主键(两个字段作为主键)理解掌握
a)xml: <composite-id></composite-id>
联合主键需要新建一个需要实现联合主键的类在本类中实现序列化和重写equals,hashCode保证唯一性。
问题:为什么要使用序列化
答:数据的同步。
b)annotation:
见源代码
六:核心开发接口(重点)
学习要有有的放矢
掌握核心开发接口必须要掌握三种对象状态,反之亦然
1)Configuration
2)SessionFactory
面试中:hibernate 的openSession和getCurrentSession的区别
答:openSession()建立的session永远都是不同的session。
使用getCurrentSession() 在上下文中找,如果有则使用,没有则建立 (还未关闭session,则当前session和其他的未关闭的session都是一样的)。
getCurrentSession()的用途:是使用界定事物边界。什么是界定事物边界。
openSession()使用完成之后需要close(),getCurrentSession()事物提交字段close
切记:面试会问到:openSession()永远是打开新的session。getCurrentSession()如果当前环境有session则拿当前环境的session,否则创建新session.
什么是上下文 即是:current_session_context_class(jta thread)
什么叫分布式就是分布在多台不同的数据库服务器上
事物分为两种:一种是依赖数据库本身的。二种是分布式
JTA:JAVA TRANSACTION API
Session (动手实践,实际开发使用)
编程开发接口:save,delete,get,load,update,saveOrUpdate,clear,flush,schemaExport
get和load的区别:(重点)
1:不存在对应记录是表现不一样
2:load返回的是代理对象,等到真正用到对象的内容时才发出SQL语句。
3:get直接从数据库加载,不会延迟
clear方法:1:无论是load,get,都是首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()方法可以强制清除session缓存。
flush方法:可以强制进行从内存到数据库的同步。
务必理解:动态代理模式(核心基础知识为:泛型,反射)
七:三种对象状态
三种状态的理解,务必理解。