1.主键,在getID前加"@Id"
2.其他字段不加注解,默认是@Basic
3.@Enumerated(EnumType.STRING) ==@Enumerated(value=EnumType.STRING) ,当是value=的时候,可以省略value=
4.generator,native就行了,mysql:identity
5.uuid生成的是String类型
6.
@GeneratedValue:主键的产生策略,通过strategy属性指定。
默认情况下,JPA自动选择一个最适合底层数据库的主键生成策略
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
1) IDENTITY:表自增键字段-->mysql,sql server
2) AUTO: JPA自动选择合适的策略,是默认选项(相当于xml中的Native)
3) SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名-->oracle
4) TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
7.联合主键bean需要实现serializable和重写equal和hashcode,确保在内存中两个对象是唯一的,因为在数据库中你主键本身是要唯一的,联合主键用得不多,不过这点难说
8.Session s=sessionfactory.openSession();创建新的session,但是最后要close(),hibernate不太推荐
Session s=sessionfactory.getCurrentSession();如果上下文环境有session则从当前环境中获得,否则新创建,但是最后不要close().
sessionfactory.getCurrentSession();有界定事务边界的作用
他们不能混用
9.两种事物:一种是数据库本身的,一种是jta的(分布式)
tomcat没有jta功能,jboss可以
10.单独使用hibernate,crud需要try-catch,但与spring结合后则不需
11.三种状态:
new后:
transient 内存中的对象没有id,这个时候缓存中肯定还没有,因为还没有save,同理,数据库也没有id
save()后:
persisted 内存中的对象有id,session的缓存map中有id,数据库中有id
commit()后:
detached 内存中的对象有id,session的缓存已经没了,数据库中有id
12.
get:立刻发送sql语句
load:生成的是Teacher.class的代理对象,延迟加载,当用到数据的时候才发送