在src/META-INF下添加persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
version="1.0">
<persistence-unit name="ApplicationEntityManager"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
</persistence>
在Spring的配置文件applicationContext.xml中添加
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost/sw?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>mysql</value></property>
</bean>
<!-- JPA EntityManagerFactoryBean for EntityManager-->
<bean id="myEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEntityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean> <tx:annotation-driven transaction-manager="transactionManager"/>
这不是唯一一种写法,网络上提供的方法可谓千差万别,我试过大多可用。
建议详读LocalContainerEntityManagerFactoryBean的API文档
GenericDaoJpa.java
package net.sw.base.dao.jpa;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityNotFoundException;
import net.sw.base.dao.GenericDao;
import net.sw.base.domain.BaseDomain;
import net.sw.util.PKgen;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import org.springframework.transaction.annotation.Transactional;
/**
* 这个类是所有 DAO 的基类,所有DAO必须继承这个类
*
*
* @author vyyv
* @param <T> 对象类名
*
* @param <PK> 对象主键(ID)的类型
*
*/
@Transactional
public class GenericDaoJpa<T extends BaseDomain, PK extends Serializable> extends JpaDaoSupport implements
GenericDao<T, PK> {
/**
* 日志文件使用方法 LogFactory.getLog(getClass())
* 来源 Commons Logging
*/
protected final Log log = LogFactory.getLog(getClass());
private Class<T> persistentClass;
/**
*{@inheritDoc}
*
*/
public GenericDaoJpa(final Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
public List<T> getAll() {
return getJpaTemplate().find(
"from " + this.persistentClass.getName());
}
/**
* {@inheritDoc}
*/
public T get(PK id) {
T entity = getJpaTemplate().find(this.persistentClass, id);
if (entity == null) {
String msg = "Uh oh, '" + this.persistentClass
+ "' object with id '" + id + "' not found...";
log.warn(msg);
throw new EntityNotFoundException(msg);
}
return entity;
}
/**
* {@inheritDoc}
*/
public boolean exists(PK id) {
T entity = getJpaTemplate().find(this.persistentClass, id);
return entity != null;
}
/**
* {@inheritDoc}
*/
public T save(T object) {
if (object.getId()==0) {
object.setId(PKgen.getInstance(0).nextPK());
object.setCreatetime(new Date());
getJpaTemplate().persist(object);
}else{
getJpaTemplate().merge(object);
}
return object;
}
/**
* {@inheritDoc}
*/
public void remove(PK id) {
getJpaTemplate().remove(this.get(id));
}
}
注意第88行,一般我们应该在构造方法中添加ID、CreateTime,但是由Flex生成并传递过来的对象不会走Java的构造方法,所以我改在这里添加。
AlbumDaoJpa.java
package net.sw.album.dao.jpa;
import java.util.Date;
import net.sw.album.domain.Album;
import net.sw.album.dao.AlbumDao;
import net.sw.base.dao.jpa.GenericDaoJpa;
import net.sw.util.PKgen;
import org.springframework.transaction.annotation.Transactional;
/**
* 相册数据访问实现
*
* @author vyyv
*
*/
//@Repository("albumDao")
@Transactional
public class AlbumDaoJpa extends GenericDaoJpa<Album,Long> implements AlbumDao {
public AlbumDaoJpa() {
super(Album.class);
}
}
@Transactional必须要标注,如果缺少事务,JPA将不能提交数据。
分享到:
相关推荐
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
Spring Data JPA系列4——Spring声明式事务处理与多数据源支持.doc
Java Web高级编程 涵盖WebSockets、Spring Framework、JPA Hibernate和Spring Security, 有目录,很清晰
spring boot整合JPA——demo
Spring Data JPA中文文档1.4.3
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
采用hibernate 4.3.6,spring 4.0.6 ,实现jpa配置,简单易懂明了。压缩文件中包含jpa依赖的hibernate包,如果下载者希望运行,需要自己写实体类。压缩包中含有精简的配置。
spring注解完整版+spring data jpa官方文档中文翻译+JPA2.0官方文档 文档内容齐全 值得参考学习
Spring Data JPA中文文档[1.4.3].zip
赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...
Spring Boot使用spring-data-jpa配置Mysql多数据源,可用版本
内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观锁、SpEL表达式在SpringData里面的应用...
Spring Boot 集成 JPASpring Boot 集成 JPASpring Boot 集成 JPASpring Boot 集成 JPASpring Boot 集成 JPASpring Boot 集成 JPA
使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速开发迭代,可用于开发模板,项目经过测试,可完美运行! 使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速...
spring struts2 JPAspring struts2 JPAspring struts2 JPAspring struts2 JPA
IDEA + SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证,security过滤请求资源,用户登录获取用户角色权限,过滤用户非法请求等
声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&创建DB,配置好maven便可运行 maven构建项目&问题:...
Spring Data JPA 简化 JPA 开发
这是 《使用 Spring Data JPA 简化 JPA 开发》的sample code。原文在 http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html
spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码