JPA和Hibernate关系之浅谈

首先我们来看一下百度百科关于JPA的解释,JPA全称Java Persistence API。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:ORM映射元数据,API,查询语言。由此可知,Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以多实现。但是我在play中定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany等等。但它们提供的功能基础,有时候想定义的更细一些,难免会用到Hibernate本身的annotation。做项目要用到Hibernate。我想抛开JPA,直接使用hibernate的注解来定义Model,很快发现了几个问题:

1:jpa中有Entity, Table,hibernate中也有,但是内容不同:2:jpa中有Column,OneToMany等,Hibernate中没有,也没有替JPA.

我原以为hibernate对jpa的支持,是另提供了一套专用于jpa的注解,但现在看起来似乎不是。一些重要的注解如Column, OneToMany等,hibernate没有提供,这说明jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两 套注解。要是这样,hibernate对jpa的支持还真够足量,我们要使用hibernate注解就必定要使用jpa。
通过在stackoverflow上的提问 : 如果我想使用hpaate与jpa,我必须使用一些“javax.persistence。*”注释?
大家给出的答案满意回答:

JPA规格 定义了javax.persistence包中的JPA注释Hibernate不仅实现了JPA规范,而且扩展了它,增加了更多的功能。所以,hibernate创建自己的注释,它们只是使用Hibernate功能来扩展JPA注释,并将这些注释放在包中org.hibernate.annotations

如果没有为该JPA注释(例如@OneToMany@ManyToOne添加指定的Hibernate特征,Hibernate将不会在其org.hibernate.annotations包中进行注释,javax.persistence并且必须根据JPA规范使用这些 注释。通常情况下,人们会使用JPA注释,直到遇到需要使用hibernate功能的情况。

总的来说,JPA是规范,Hibernate是框架,JPA是持久化规范,而Hibernate实现了JPA。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值