近三天jpa的总结
最近由于项目的需要,学习了下jap,以下就简单记录下最近这两天的学习总结:
?
?
1.jpa是一种规范而不是具体的orm产品架构,就像类中的接口一样,他只是规定了你能干什么,而具体的怎么干是需要根据不同的orm框架自来来确定的,但是没有仔细读过jpa的文档,不知道jpa中对主键查询的缓存功能是不是jap规范的一部分,但是通过最近的研究发现hibernate对jpa的实现是可以支持主键查询缓存的,通常就叫它一级缓存吧,同时hibernate自己也提供缓存机制,借助第三方缓存来实现,就姑且先称为二级缓存吧
?
?
2.jpa现在已经脱离于ejb的体系,因此可以在web容器中运行,但是如果项目中用到了ejb的相关bean则必须使用诸如glasfish等容器来运行
?
?
3.jpa的persistence.xml是jpa的核心配置文件
?
以上是我工程的配置文件,插一句,最近使用了maven的项目管理构建工具,感觉比ant要强大的多,maven对工程版本,jar包的管理,工程构建的管理都是很方便和强大的。文件中首先是对版本的声明,目前的版本是2.0 ,具体1.0版本和2.0版本的区别还不是太清楚,但从自己的例子方面开,也可以使用1.0版本的dtd,但还是建议使用2.0版本。transaction-type声明了entityy的事务管理的方式,可以是jta 也可以是resource_local,persistence-unit 声明了持久化单元,他是生成entitiyfactory的具体实现,里面声明了数据库的连接,缓存策略等内容。provider指定了具体的jpa的实现着,这里使用的是hibernate的实现,sharaed-cach指定是否可以共享缓存。后面的properties是指定数据库的相关内容,需要注意的是 <property name="hibernate.hbm2ddl.auto" value="create-update" /> 这段代码主要声明了实体与数据库表之间的生成策略,如果你已经声明好了一个实体,但是还没有创建相应的表,使用该属性可以为你创建相关的表,但是前提必须要有已经建立好的相应的数据库。该属性的取值有create-update ,经过试验发现这个属性不能自动由实体来构建表,update属性可以在如果表不存在的情况下创建相关的表结构。create属性是当你每进行一次数据库操作的时候它都会创建一个新表,原有的旧表被删除,里面的内容自然就不存在了,所以要慎用此属性。如果已经建好表,并有相关的entity了则推荐使用create-update属性。在这个工程中采用的annotation的方式实现entity而不是使用配置文件,具体的代码会在下篇记录下,今天要去看考场,星期天要去国考,哎~~~~~~~~~~~打酱油啊,大家知道的,呵呵。