近三天jpa的总结

最近由于项目的需要,学习了下jap,以下就简单记录下最近这两天的学习总结:

 

 

1.jpa是一种规范而不是具体的orm产品架构,就像类中的接口一样,他只是规定了你能干什么,而具体的怎么干是需要根据不同的orm框架自来来确定的,但是没有仔细读过jpa的文档,不知道jpa中对主键查询的缓存功能是不是jap规范的一部分,但是通过最近的研究发现hibernate对jpa的实现是可以支持主键查询缓存的,通常就叫它一级缓存吧,同时hibernate自己也提供缓存机制,借助第三方缓存来实现,就姑且先称为二级缓存吧

 

 

2.jpa现在已经脱离于ejb的体系,因此可以在web容器中运行,但是如果项目中用到了ejb的相关bean则必须使用诸如glasfish等容器来运行

 

 

3.jpa的persistence.xml是jpa的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="tao3cJPAStudy" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
		<properties>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/datang" />
			<property name="javax.persistence.jdbc.user" value="root" />
			<property name="javax.persistence.jdbc.password" value="ws1985" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
			<property name="hibernate.hbm2ddl.auto" value="create-update" />

			<property name="hibernate.cache.use_second_level_cache" value="true" />
			<property name="hibernate.cache.use_query_cache" value="true" />
			<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory" />
		</properties>
	</persistence-unit>
</persistence>

 

以上是我工程的配置文件,插一句,最近使用了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而不是使用配置文件,具体的代码会在下篇记录下,今天要去看考场,星期天要去国考,哎~~~~~~~~~~~打酱油啊,大家知道的,呵呵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值