3
回答
关于Jpa的问题,jpa是规范没有底层实现,那么
【腾讯云】学生服务器套餐10元/月 >>>   

既然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么?

举报
田Instance
发帖于4年前 3回/574阅
共有3个答案 最后回答: 4年前

看错问题。。

用了maven了吗? 检查依赖。

--- 共有 1 条评论 ---
田Instance用maven missing了许多jar包,所以直接拷贝jar包到lib下面去了,没有拷hibernate的包 4年前 回复

所谓规范,就是一系列的规定和约定。

在容器中,按JPA的规定处理persistence.xml 中配置参数
<provider>org.hibernate.ejb.HibernatePersistence</provider>时,就会在它所有的class-path中找这个类(注意这个class-path不是你定义的环境变量,它有可能是某个目录下所有的jar文件),所以,只要在class-path中有hibernate的jar,类工厂就能正常工作,比如:EntityManager em = emFactory.createEntityManager(); 

这同时也是设计模式中的一种。

--- 共有 3 条评论 ---
田Instance恩,谢了。找到了,藏在jboss容器里的 4年前 回复
田Instance恩,我跑去 classpath下面去找了,还是没有hibernate的包,请问还有可能藏在哪里呢 4年前 回复
szf所有的这些东东(规范啊,模式啊),目的就是解耦,比如,可以让你的Serverlet不依赖hibernate就能访问数据库,也可以不依赖tomcat,换个resin也能跑起来。 4年前 回复
顶部