在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 中文文档[1.4.3]》PDF 文件,开发者可以深入了解这些特性和如何在实际项目中应用它们,从而提升开发效率和代码质量。文档中可能还会涵盖错误处理、性能优化以及与其他 Spring 模块的协作...
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
本示例“spring boot整合JPA——demo”将演示如何在Spring Boot项目中配置和使用JPA。 首先,我们需要理解Spring Boot与JPA的关系。Spring Boot是基于Spring框架的快速开发工具,它通过自动化配置减少了常规设置...
在IT领域,Spring框架是Java开发中的核心工具之一,它为构建企业级应用程序提供了全面的解决方案。Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过...
Java Web高级编程是一门涵盖多种技术的课程,这些技术包括WebSockets、Spring Framework、JPA(Java Persistence API)以及Hibernate和Spring Security。下面将详细介绍这些知识点。 WebSockets是一种网络通信技术...
Spring Data JPA是Java开发中的一个关键框架,它简化了与关系型数据库的交互,特别是基于Java Persistence API (JPA)。这个框架是Spring生态系统的组成部分,为开发者提供了声明式数据访问的方式,允许通过简单的...
在现代企业级应用程序开发中,数据源管理是一个关键部分,特别是在需要处理来自多个数据库的数据时。Spring Boot结合JPA(Java Persistence API)和JdbcTemplate,为开发者提供了灵活且强大的多数据源配置能力。本...
至于压缩包中的“helloworld”文件,可能是一个简单的示例项目,通常会包含一个基础的Spring Data JPA配置,一个实体类,以及对应的Repository接口,用于展示Spring Data JPA的基本用法。通过查看这个例子,你可以更...
2. **配置JPA**:在Spring的配置文件中,设置JPA的实体扫描路径、数据源、持久化单元名称等信息。 3. **定义Repository接口**:创建一个Repository接口,继承SpringData提供的JpaRepository或CrudRepository接口,...
2. **配置JPA**:在Spring的配置文件中,需要配置数据源、JPA供应商(例如Hibernate)、实体扫描路径等。这可以通过XML配置或者基于注解的配置完成。 3. **定义实体**:创建表示数据库表的Java类,并使用JPA的注解...
Struts2、Spring和JPA是Java开发中常用的三大框架,它们在企业级应用开发中发挥着关键作用。Struts2作为MVC框架,负责控制应用程序的流程;Spring框架则是一个全面的后端解决方案,提供了依赖注入(DI)、面向切面...
在现代互联网开发中,Spring Boot、JPA(Java Persistence API)以及Redis已经成为构建高效、可扩展的应用程序的常用技术栈。本项目结合这三个核心组件,旨在创建一个能够利用缓存优化性能的分布式系统。以下将详细...
在项目中,它可能负责定义如何使用JPA来操作用户角色和权限数据,以及如何配置SpringSecurity的过滤规则。 在实际的实现过程中,开发者首先会创建一个用户实体(User),并关联角色实体(Role)。每个角色都有多个...
2. **配置OpenJPA**:在Spring的配置文件(如`applicationContext.xml`)中,你需要配置OpenJPA的数据源、实体扫描路径以及JPA的属性: ```xml <!-- 数据库连接配置 --> ...
Spring 和 OpenJPA 集成是企业级Java开发中常见的技术组合,主要用于构建数据持久化层。Spring 是一个强大的轻量级应用框架,而 OpenJPA 是一个开源的 Java Persistence API (JPA) 实现,它允许开发者将对象关系映射...
在Java Web开发中,Spring MVC和JPA(Java Persistence API)以及Hibernate作为ORM(对象关系映射)框架的实现,是构建高效、可维护性的应用的常见选择。本示例将探讨如何将这三个组件整合在一起,以实现一个完整的...
采用hibernate 4.3.6,spring 4.0.6 ,实现jpa配置,简单易懂明了。压缩文件中包含jpa依赖的hibernate包,如果下载者希望运行,需要自己写实体类。压缩包中含有精简的配置。
本篇文章将详细讲解如何在Spring应用中配置JPA,并使用BoneCP作为数据源。 BoneCP是一款高效的、开源的数据库连接池,它能显著提高数据库操作性能。 首先,我们需要理解Spring与JPA的关系。Spring是企业级Java应用...
Spring Boot JPA与Security是两个在Java开发领域中极为重要的技术框架,它们分别专注于数据访问和应用程序的安全管理。本文将深入探讨这两个框架的核心概念、如何整合使用以及在实际项目中的应用。 Spring Boot是由...