关于Jpa的问题,jpa是规范没有底层实现,那么
既然JPA没有底层实现,我在使用persistence.xml 如下配置时:
<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/test" /> <!-- ?characterEncoding=UTF-8 -->
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password"
value="" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<!--
<property name="hibernate.hbm2ddl.auto" value="update" />
-->
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
用的是hibernate的实现吧,但是我并没有引用hibernate的jar包,
在servlet里面:
public void init() throws ServletException {
if (emFactory == null) {
emFactory = Persistence.createEntityManagerFactory("jpa");
}
}
//可以直接用了,好奇怪
EntityManager em = emFactory.createEntityManager();
em.getTransaction().begin();
Student stu = em.find(Student.class, id);
em.getTransaction().commit();
em.close();
这是肿么回事呢,难道javaee.jar内部集成了hibernate么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
所有的这些东东(规范啊,模式啊),目的就是解耦,比如,可以让你的Serverlet不依赖hibernate就能访问数据库,也可以不依赖tomcat,换个resin也能跑起来。
恩,我跑去 classpath下面去找了,还是没有hibernate的包,请问还有可能藏在哪里呢
所谓规范,就是一系列的规定和约定。
在容器中,按JPA的规定处理persistence.xml 中配置参数
<provider>org.hibernate.ejb.HibernatePersistence</provider>时,就会在它所有的class-path中找这个类(注意这个class-path不是你定义的环境变量,它有可能是某个目录下所有的jar文件),所以,只要在class-path中有hibernate的jar,类工厂就能正常工作,比如:EntityManager em = emFactory.createEntityManager();
这同时也是设计模式中的一种。
用maven missing了许多jar包,所以直接拷贝jar包到lib下面去了,没有拷hibernate的包
看错问题。。
用了maven了吗? 检查依赖。