`
vyyv
  • 浏览: 17590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

网络相册开发(4)——Spring中配置JPA

    博客分类:
  • Flex
阅读更多

在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&amp;useUnicode=true&amp;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将不能提交数据。

分享到:
评论
5 楼 vyyv 2009-03-13  
jbeduhai 写道

spring.xml配置代码有问题,不知道你是怎么调用到JPA @Transactional 换句话说,以你上面的配置代码:@Transactional 起不了作用的啊,


不好意思,落了一句。
<tx:annotation-driven transaction-manager="transactionManager"/>
4 楼 vyyv 2009-03-13  
zhoun 写道

save方法中, 应该返回merge方法返回的对象, 而不是原对象,否则version等字段就不对了


有道理,谢谢,我改一下
3 楼 zhoun 2009-03-13  
save方法中, 应该返回merge方法返回的对象, 而不是原对象,
否则version等字段就不对了
2 楼 jbeduhai 2009-03-13  
spring.xml配置代码有问题,不知道你是怎么调用到JPA @Transactional

换句话说,以你上面的配置代码:@Transactional 起不了作用的啊,
1 楼 jbeduhai 2009-03-13  
spring.xml配置代码有问题,不知道你是怎么调用到JPA @Transactional

换句话说,以你上面的配置代码:@Transactional 起不了作用的啊,
 

相关推荐

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    通过阅读《Spring Data JPA 中文文档[1.4.3]》PDF 文件,开发者可以深入了解这些特性和如何在实际项目中应用它们,从而提升开发效率和代码质量。文档中可能还会涵盖错误处理、性能优化以及与其他 Spring 模块的协作...

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    spring boot整合JPA——demo

    本示例“spring boot整合JPA——demo”将演示如何在Spring Boot项目中配置和使用JPA。 首先,我们需要理解Spring Boot与JPA的关系。Spring Boot是基于Spring框架的快速开发工具,它通过自动化配置减少了常规设置...

    spring注解+spring data jpa文档+JPA文档.rar

    在IT领域,Spring框架是Java开发中的核心工具之一,它为构建企业级应用程序提供了全面的解决方案。Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过...

    Java Web高级编程 涵盖WebSockets、Spring Framework、JPA Hibernate和Spring Security

    Java Web高级编程是一门涵盖多种技术的课程,这些技术包括WebSockets、Spring Framework、JPA(Java Persistence API)以及Hibernate和Spring Security。下面将详细介绍这些知识点。 WebSockets是一种网络通信技术...

    Spring Data JPA中文文档[1.4.3].zip

    Spring Data JPA是Java开发中的一个关键框架,它简化了与关系型数据库的交互,特别是基于Java Persistence API (JPA)。这个框架是Spring生态系统的组成部分,为开发者提供了声明式数据访问的方式,允许通过简单的...

    Spring Boot+Jpa多数据源配置Demo(支持不同数据库)

    在现代企业级应用程序开发中,数据源管理是一个关键部分,特别是在需要处理来自多个数据库的数据时。Spring Boot结合JPA(Java Persistence API)和JdbcTemplate,为开发者提供了灵活且强大的多数据源配置能力。本...

    Spring Data JPA 笔记

    至于压缩包中的“helloworld”文件,可能是一个简单的示例项目,通常会包含一个基础的Spring Data JPA配置,一个实体类,以及对应的Repository接口,用于展示Spring Data JPA的基本用法。通过查看这个例子,你可以更...

    SpringData和Spring和JPA的整合

    2. **配置JPA**:在Spring的配置文件中,设置JPA的实体扫描路径、数据源、持久化单元名称等信息。 3. **定义Repository接口**:创建一个Repository接口,继承SpringData提供的JpaRepository或CrudRepository接口,...

    Spring2.5整合JPA

    2. **配置JPA**:在Spring的配置文件中,需要配置数据源、JPA供应商(例如Hibernate)、实体扫描路径等。这可以通过XML配置或者基于注解的配置完成。 3. **定义实体**:创建表示数据库表的Java类,并使用JPA的注解...

    Struts2 Spring Jpa 配置测试

    Struts2、Spring和JPA是Java开发中常用的三大框架,它们在企业级应用开发中发挥着关键作用。Struts2作为MVC框架,负责控制应用程序的流程;Spring框架则是一个全面的后端解决方案,提供了依赖注入(DI)、面向切面...

    spring boot+jpa+redis集群

    在现代互联网开发中,Spring Boot、JPA(Java Persistence API)以及Redis已经成为构建高效、可扩展的应用程序的常用技术栈。本项目结合这三个核心组件,旨在创建一个能够利用缓存优化性能的分布式系统。以下将详细...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    在项目中,它可能负责定义如何使用JPA来操作用户角色和权限数据,以及如何配置SpringSecurity的过滤规则。 在实际的实现过程中,开发者首先会创建一个用户实体(User),并关联角色实体(Role)。每个角色都有多个...

    Spring中使用OpenJPA

    2. **配置OpenJPA**:在Spring的配置文件(如`applicationContext.xml`)中,你需要配置OpenJPA的数据源、实体扫描路径以及JPA的属性: ```xml &lt;!-- 数据库连接配置 --&gt; ...

    Spring和openJPA集成

    Spring 和 OpenJPA 集成是企业级Java开发中常见的技术组合,主要用于构建数据持久化层。Spring 是一个强大的轻量级应用框架,而 OpenJPA 是一个开源的 Java Persistence API (JPA) 实现,它允许开发者将对象关系映射...

    spring mvc 与JPA/Hibernate的整合示例

    在Java Web开发中,Spring MVC和JPA(Java Persistence API)以及Hibernate作为ORM(对象关系映射)框架的实现,是构建高效、可维护性的应用的常见选择。本示例将探讨如何将这三个组件整合在一起,以实现一个完整的...

    spring 4.0.6 + jpa2.0配置

    采用hibernate 4.3.6,spring 4.0.6 ,实现jpa配置,简单易懂明了。压缩文件中包含jpa依赖的hibernate包,如果下载者希望运行,需要自己写实体类。压缩包中含有精简的配置。

    各种数据源配置之Spring+JPA配置BoneCP数据源

    本篇文章将详细讲解如何在Spring应用中配置JPA,并使用BoneCP作为数据源。 BoneCP是一款高效的、开源的数据库连接池,它能显著提高数据库操作性能。 首先,我们需要理解Spring与JPA的关系。Spring是企业级Java应用...

    spring boot jpa security

    Spring Boot JPA与Security是两个在Java开发领域中极为重要的技术框架,它们分别专注于数据访问和应用程序的安全管理。本文将深入探讨这两个框架的核心概念、如何整合使用以及在实际项目中的应用。 Spring Boot是由...

Global site tag (gtag.js) - Google Analytics