JPA 学习笔记
eclipse 新建jpa项目 :
修改 persistence.xml 文件
创建 Customer 类:
column 名称和数据库名称对应则不用写
类写好后在 persistence.xml 添加持久化类:
编写main方法:
右键运行 数据库自动创建:数据插入数据库
JPA基本注解:
一般讲注解加到 get方法上面:
如果entity 中有列名没有加注解 就相当于自动加上了 @Basic 注解
entity中不需要映射到数据库表的一列 可以加 @Transient
创建默认 birth,createdTime 数据库生成样式:
birth createdTime 类型是 datatime 类型:
重新设置后:createdTime 精确到时分秒 birth 精确到 日期
业务场景不是很多:
pkColumnName -》 PK_NAME 确定列
pkColumnValue -CUSTOMER_ID 确定第几行
valueColumnName -》确定初始化值
allocationSize-》每次增长多少
Find方法 调用方法直接发sql语句 :
getReference 方法调用不发sql, 用到 查询出结果时候才发出sql 懒加载:
persistence 方法类似save方法 有些许不同:
hibernate delete方法:new customer 不能进行移除 只有查询出来的可以移除
hibernate saveOrUpdate 方法:
如果是hibernate session关联2个数据不能进行saveOrUpdate方法 已经有ID=4的数据 并且数据库有数据 entityManager 关联 customer 1,2 JPA可以进行merge:
类似
----------------------------------------------------------------------------------------------------------------------------------------------------
和hibernate session 中 flush 方法相同。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
关联关系:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
单向多对一:
多个order 对应一个 Customer
保存:
懒加载ManyToOne:fetch lazy
删除:
修改:
单向一对多:
保存:
查询:加载方式也可以修改 Customer 类中 getOrder 方法 @OneToMany fetch 属性修改加载策略
修改:可以级联删除 级联制空
修改:set直接就update了??????????
双向多对一:
上面两种情况同时打开就是双向多对一 也就是双向一对多:
customer
order
保存:
放弃维护关系:Customer类中 设置 mappedBy="customer"
双向一对一:
经理和部门关系:
department:
manager:
保存:
查询: