码迷,mamicode.com
首页 > 其他好文 > 详细

JPA的学习

时间:2017-04-23 20:17:41      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:onetomany   man   ansi   策略   ransient   refresh   属性   action   nsca   

JPA 
1.实体注解 @Entity
主键注解  @Id   主键策略@GeneratedValue(strategy=GenerationType.AUTO[IDENTITY,SEQUENCE,TABLE]) auto:根据方言数据库自己选择,默认选项 identity:MySQL支持  sequence:oracle支持
@Column(length=32)字段长度 
@Temporal(TemporalType.DATE) 日期类型注解,只存储日期
@Lob 字段为长文本或者二进制数据时
@Transient 属性不和数据库字段映射
@Basic(fetch=Fetch.LAZY) 用在字段上面,延迟加载,用不到的时候是不会加载到内存的
2.提供的接口

EntityManagerFactory 功能等价于hibernate里的sessionFactory
EntityManager 等价于SessionManager

 

技术分享
EntityManagerFactory factory=Persistence.careateEntityManagerFactory("[配置文件里的持久化单元名称]")
EntityManager em=factory.createEntityManager();
em.getTranscation().begin();  //开始事物
em.persist(new Entity());
em.getTransaction().commit();
em.close();
factory.close();
技术分享

find() :根据ID号加载实体,相当于hibernate里的get()
getReference(): 根据ID号懒加载实体类,只有访问实体类的对象时才会与数据库同步,相当于hibernate里的load
remove():删除,里面参数为对象
查询语句:

Query query=em.createQuery("select o from person o where o.id=?1");
query.setParameter(1,2);
List<Person> personList=query.getResultList();

 


更新查询:

1 Query query=em.createQuery("delete  from person o where o.id=?1");
2 query.setParameter(1,2);
3 quert.executeUpdate();

 

refresh():使内存中的Javabean和数据库数据再一次同步化。注:已经执行过find函数了,此时别人修改了数据库中的数据,你再次调用find函数是无法更新值得,因为jpa会默认从EntityManager中返回给你
3、双向管理与级联操作
1-m关系(用注解OneToMany):多的一方为关系的维护的,关系维护断负责外键记录的更新,关系被维护断是没有权利更新外键字段的

其中可以有参数cascade,值可取CascadeType.Refresh,CascadeType.persist等

fetch:值可取FetchType.EAGER(立即得到),FetchType.LAZY(延迟加载),默认为EAGER

mappedby:出现这个的类为关系的被维护端,值为维护端中的一个属性。例如订单和订单项,在订单里的订单项上的oneToMan注解中出现此参数,表示订单表Order为被维护的表,订单项表的OrderItem里的Order属性来维护,则mappedby的值就是"order"

@JoinColumn:定义外键字段的名称 例如@JoinColumn(name="order_id")

JPA的学习

标签:onetomany   man   ansi   策略   ransient   refresh   属性   action   nsca   

原文地址:http://www.cnblogs.com/tangshiguang/p/6753556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!