JPA入门学习(二)

JPA 中的主键生成策略
1 IDENTITY:主键由数据库自动生成(主要是自动增长型)
2 SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列
3 TABLE:使用一个特定的数据库表格来保存主键JPA通过创建一张表来实现,存放的是下一次id的值

4 AUTO: 由以上三个选择一个(默认是 TABLE)
hibernate 中提供的主键生成规则
自然主键:
把具有业务含义的字段作为主键,称之为自然主键
代理主键:
把不具备业务含义的字段作为主键,称之为代理主键。整数类型比字符串类型要节省更多的数据库空间
 

使用方式
1声明策略@GenericGenerator(name="uuid",strategy="uuid")
strategy 属性用于指定 hibernate 中提供的生成规则
name 属性用于给使用的生成规则起个名称,以供 JPA 引用
2引用策略@GeneratedValue(generator="uuid")

JPA 中的一级缓存

EntityManager级别的缓存,存的是对象地址
em.find(Customer.class, 1l)
key              value
字节码         map   key   value
                     oid    对象v

JPA 中的快照机制(用于缓存同步)
JPA 向一级缓存放入数据时,同时复制一份数据放入快照中,当使用 commit()方法提交事务时,同时会清
理一级缓存, 这时会使用主键字段的值判断一级缓存中的对象和快照中的对象是否一致,如果两个对象中的属性发
生变化,则执行 update 语句,将缓存的内容同步到数据库,并更新快照;如果一致,则不执行 update 语句。

对象的三种状态
瞬时态:没有oid和session  (EntituManageer)没有关系
脱管态:有oid和session(EntityManager没有关系)
持久态:有oid和session(EntityManager)有关系
删除态:有oid和session(EntityManager)有关系已经调用了remove或者 delete
在hibernate(JPA)种操作就是对对象状态的操作
persiste(save)把瞬时变成了持久
update(merge)把脱管态转持久态
查询都是持久态
delete:就是把持久态转化成删除态


JPA中的一对多

一对多配置步骤
一方实体中:存放多方的实体集合
@oneToMany
targetEntityClass:指定多的多方的类的字节码
mappedBy:指定从表实体类中引用主表对象的名字
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
orphanRemoval:是否使用孤儿删除
多方:存放一方的实体对象
@ManyToOne
targetEntityClass:指定一的一方实体类字节码
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
optional:关联是否可选。如果设置为 false,则必须始终存在非空关系
@JoinColumn
name:指定外键字段的名称
referencedColumnName:指定引用主表的主键字段名称
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。

小心这两个注解mappedBy和JoinColumn时互斥的

JPA 中的多对多
配置步骤
实体中各自存有对方的实体集合
@ManyToMany
cascade:配置级联操作。
fetch:配置是否采用延迟加载。
targetEntity:配置目标的实体类。映射多对多的时候不用写
mappedBy让对方来维护关系,值是对方实体中这一方属性名称
@JoinTable
name:配置中间表的名称
joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段
inverseJoinColumn:中间表的外键字段关联对方表的主键字段

JPA 中的查询
对象导航查询(多表查询很方便)
根据已经加载的对象,导航到他的关联对象两个对象之间必须存在关联关系
 

猜你喜欢

转载自blog.csdn.net/minecodelife/article/details/81191376
今日推荐