普通java代码如何调用hibernate4.0 实现annotation

J2EE 码拜 9年前 (2015-04-04) 956次浏览 0个评论
 

在常规方式中我们使用java的jdbc调用数据库,大框架里如springMVC 我们借助sping对包进行扫描实现注册,但是楼主最近在研究spark,这么一个脱离web容器的微型框架,想给他添加hibernate4.0的支持。添加了相关jar包之后,在src包下添加package:META-INF/persistence.xml 然后java中使用

EntityManagerFactory factory = Persistence.createEntityManagerFactory("ningbo");

 但是结果是出现找不到“ningbo”的错误,显然并没有将配置文件注册进来,另外要如何对实体类进行注册,总不能还用以前的hibernate.cfg.xml来一一对应吧,求大神指点。

普通java代码如何调用hibernate4.0 实现annotation
你还可以用spring啊,启动的时候加载spring的配置文件 ,通过spring去扫描,然后通过spring获取对应的类就可以了。

ApplicationContext context = new FileSystemXmlApplicationContext(
				"classpath:conf/applicationContext.xml");
		RefreshReportDate refreshReportDate = (RefreshReportDate) context
				.getBean("refreshReportDate");
普通java代码如何调用hibernate4.0 实现annotation
《Java Persistence with Hibernate》是这么说的:
“Create a directory named WORKDIR /etc/ META-INF and place the basic config-
uration file named persistence.xml”
普通java代码如何调用hibernate4.0 实现annotation
在src包下添加package?楼主明确下啊,META-INF是个目录而已,不是package。
普通java代码如何调用hibernate4.0 实现annotation
引用 3 楼 yys79 的回复:

在src包下添加package?楼主明确下啊,META-INF是个目录而已,不是package。

 
我说错了 META-INF是无法为package名的 他还是以文件夹的形式存在的 存放在src根目录下
现在问题是怎么让这个配置文件注册进来?

普通java代码如何调用hibernate4.0 实现annotation
是不是没有加入jpa相关的包?META-INF/persistence.xml是jpa标准支持的,而不是原始的hibernate就支持。当然,如果你hibernate的包都全了,那应该算是加入了。
普通java代码如何调用hibernate4.0 实现annotation
引用 5 楼 yys79 的回复:

是不是没有加入jpa相关的包?META-INF/persistence.xml是jpa标准支持的,而不是原始的hibernate就支持。当然,如果你hibernate的包都全了,那应该算是加入了。

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>4.3.7.Final</version>
</dependency>
包是通过maven官方下载 hibernate4.x 支持jpa标准  目前这么一个目录系统如何去监控读取的 显然不可能是目录对了就自动注册的吧?

普通java代码如何调用hibernate4.0 实现annotation
50分
hibernate-core明显是hibernate核心包,不包含jpa扩展。
 <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.0.Final</version>
            <scope>provided</scope>
       </dependency>
       <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version> 
        </dependency>
<dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-entitymanager</artifactId>
         <version>4.2.0.Final</version>
</dependency>
普通java代码如何调用hibernate4.0 实现annotation
引用 7 楼 yys79 的回复:

hibernate-core明显是hibernate核心包,不包含jpa扩展。
 <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.0.Final</version>
            <scope>provided</scope>
       </dependency>
       <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version> 
        </dependency>
<dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-entitymanager</artifactId>
         <version>4.2.0.Final</version>
</dependency>

这些包肯定是有的 要不然程序早报错了…我还是想办法从hibernate的原始配置文件入手寻找结果把

普通java代码如何调用hibernate4.0 实现annotation
看来你还不是玩jpa的人啊
普通java代码如何调用hibernate4.0 实现annotation
引用 9 楼 yys79 的回复:

看来你还不是玩jpa的人啊

core的maven包含子maven pom 会下载 jpa api 

关于jpa 我特意看了下 标准中的 文件只要在META-INF/p…xml 就会自动识别 

我的程序中依然找不到unit 显然问题就在这了…

普通java代码如何调用hibernate4.0 实现annotation
标准中的 文件只要在META-INF/p…xml 就会自动识别,就是这样的,没有任何其他方式。web的是WEB-INF/classes/META-INF/p…xml,就这点区别。
普通java代码如何调用hibernate4.0 实现annotation
想到个问题,你用maven,src目录下怎么能直接增加工程的内容?标准默认情况下,maven如果想增加perisitence.xml,应该在src\main\resources\META-INF。
普通java代码如何调用hibernate4.0 实现annotation
引用 12 楼 yys79 的回复:

想到个问题,你用maven,src目录下怎么能直接增加工程的内容?标准默认情况下,maven如果想增加perisitence.xml,应该在src\main\resources\META-INF。

你说的应该是新建maven的目录问题把 这个不影响的,我特地试过,错误一样,因为我项目是通过转换的(我最初新建的是java项目),目录跟新建maven项目有所区别,JPA的标准应该就是在src根目录下。我现在在想它是否是在我们获取unit对象的时候去读取配置文件获取持久化对象,还是在项目启动的时候就自动装载好然后获取的对象…

普通java代码如何调用hibernate4.0 实现annotation
说了半天,我估计主要是目录的问题,你可以用maven 打包一下看看,打包好的jar包内是否包含那个META-INFO/p…xml文件,这个才是主要的,因为eclipse打包的资源文件可以自定义的,如果按照maven默认是不会出什么问题的。
普通java代码如何调用hibernate4.0 实现annotation
结贴 问题如楼上所讲 是jar包引用的问题
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.7.Final</version>
</dependency>

单独添加即生效 非常感谢您的回答


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明普通java代码如何调用hibernate4.0 实现annotation
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!