`
prowl
  • 浏览: 80849 次
  • 性别: Icon_minigender_1
  • 来自: 艾泽拉斯
社区版块
存档分类
最新评论

Spring+JPA(hibernate)整合 一对多及继承关系配置

    博客分类:
  • jpa
阅读更多
花了三天时间总算把spring+JPA搞定了。例子涉及OneToMany(单向,外键关联主键)的映射,和主pojo的继承关系。

看一下域对象及数据库关系图:



pojo,父类(Topic):

@Entity(name="t_topic")
//父子同一个表
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
//区分父子pojo的字段,在这里预设父类的"topic_type"等于"a"
@DiscriminatorColumn(name="topic_type", discriminatorType=DiscriminatorType.STRING,length=2)
@DiscriminatorValue(value="a")
public class Topic implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="topic_id")
    private int topicId;
    
    @Column(name="topic_title",length=100)
    private String topicTitle;
    
    //java.sql.Date 时间类型
    @Temporal(TemporalType.DATE)
    @Column(name="topic_time")
    private Date topicTime;
    
    @Column(name="topic_views")
    private int topicViews;
    
    setter & getter...
}


子类(PollTopic):

@Entity
@DiscriminatorValue(value="b")
public class PollTopic extends Topic{
    
    private boolean multiple;
    
    @Column(name="max_choices")
    private int maxChoices;
    
    /**
     * @OneToMany中通过mappedBy属性指定“Many”方类引用“One”方类的属性名,
     * 这里 mappedBy="pollTopic"表示 PollOption实体拥有一个指定 PollTopic的pollTopic属性。  
     */
    @OneToMany(mappedBy="pollTopic",cascade=CascadeType.ALL)
    private Set<PollOption> options=new HashSet<PollOption>();

    setter and getter..
}



OneToMany里“Many”的pojo:

@Entity
@Table(name="t_poll_option")
public class PollOption implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="option_id")
    private int id;
    
    @Column(name="option_item")
    private String optionItem;
    
    @ManyToOne
    @JoinColumn(name="topic_id",nullable=false)
    private PollTopic pollTopic;
    
    setter and getter...
}



spring的配置文件 applicationContext.xml:(Jpa相关的配置,非全部)

	<bean id="myEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="test" />
		<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 bean="myEntityManagerFactory" />
		</property>
		<property name="jpaDialect" >
		  <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
		</property>
	</bean>
    <!-- DAO的配置,需实现一个DAO的接口,否则会出现类型转换异常-->
	<bean id="jpaDaoImpl" class="jpa.dao.JpaDaoImpl">
        <property name="entityManagerFactory">
            <ref bean="myEntityManagerFactory" />
        </property>
	</bean>


Jpa的配置文件 persistence.xml(需放在src/META-INF目录下)
<?xml version="1.0"?>
<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">
  <!-- name和spring里面的配置要一致 -->
  <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
  </persistence-unit>
</persistence>


最后来看一下DAO的2个类

//声明事务
@Transactional
public interface JpaDao {
    public void save(Object obj);
}

//这里一定要实现一个Dao的接口,全当时编码规范吧,因为这个接口耽误了我很多时间,总是出一些莫名奇妙的错误!
public class JpaDaoImpl extends JpaDaoSupport implements JpaDao{
    public void save(Object obj){
	getJpaTemplate().persist(obj);
    }
}



测试类:

public class TestAnnotation extends TestCase {
    
    static ApplicationContext ctx =null;
    static{
	ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    public void testOneToMany() {
	JpaDao dao=(JpaDao) ctx.getBean("jpaDaoImpl");
	
	PollTopic topic = new PollTopic();
	topic.setTopicTime(new Date());
	topic.setTopicTitle("yangyang");
	topic.setTopicViews(10);
	topic.setMultiple(false);
	topic.setMaxChoices(3);

	PollOption option = new PollOption();
	option.setOptionItem("选举");
	
	option.setPollTopic(topic);
	topic.getOptions().add(option);
	
	dao.save(topic);

    }
    


这里面主要是参照附件里的JPA_Basic.pdf里的一多关系例子,同时附上源码,里面有一个Person的HelloWorld很简单,如果看不明白可以先看下这个。

依赖的类库:



notice:采用hibernate3.3+spring2.6 其中涉及到lib的 hibernate-distribution-3.3.2.GA,hibernate-annotations-3.4.0.GA,hibernate-entitymanager-3.4.0.GA,hibernate-entitymanager-3.4.0.GA 请按版本号到官网下载,否则总会出现一些莫名其妙的异常让你很郁闷。


  • src.rar (4.6 KB)
  • 下载次数: 67
  • 大小: 47.8 KB
  • 大小: 38.3 KB
1
0
分享到:
评论

相关推荐

    jsf+spring+jpa

    其中,“JSF + Spring + JPA”作为一种新兴的技术组合,正在逐渐取代传统的“SSH”(Struts + Spring + Hibernate)组合。这一新的技术栈不仅继承了Spring框架的强大功能,还充分利用了JavaServer Faces (JSF) 和 ...

    spring+hibernate整合简单示例

    在实际项目中,"spring+hibernate整合简单示例"可能包含以下内容:一个简单的Spring配置文件,定义了DataSource、SessionFactory、TransactionManager等bean;一个或多个DAO接口和其实现类,使用HibernateTemplate...

    spring整合jpa mysql

    Spring整合JPA与MySQL是现代Java企业级应用中常见的数据持久化方案,它结合了Spring框架的灵活性和Java Persistence API(JPA)的强大功能,同时利用MySQL作为关系型数据库,提供高效、便捷的数据存储和查询能力。...

    简单的spring整合JPA

    Spring框架提供了一个名为Spring Data JPA的模块,它实现了对JPA的全面支持。Spring Data JPA通过提供自动化的Repository接口实现,简化了数据访问层的开发。它允许我们仅定义Repository接口,而无需编写具体的DAO...

    整合Spring Data JPA1

    Spring Data JPA 是 Spring Data 框架的一个重要组成部分,它为 Java 持久层提供了一种基于 JPA(Java Persistence API)的简单、高效的解决方案。JPA 是 Java 标准,用于管理关系数据库中的对象,它通过 ORM(对象...

    idea下整合springboot+spring data jpa

    Spring Boot提供了快速启动和配置的机制,而Spring Data JPA则是Spring框架的一部分,专注于数据库交互,使得开发者可以使用更加高级、抽象的方式来操作数据库,无需编写大量的JDBC代码。本文将详细介绍如何在...

    springmvc, spring5.x , hibernate5.x 整合

    整合Spring MVC、Spring 5.x和Hibernate 5.x,我们可以构建一个强大的后端系统。首先,我们需要在Spring配置中声明Hibernate的DataSource和SessionFactory,然后通过Spring的JdbcTemplate或Hibernate的Session接口...

    搭建Struts2.1+Spring3.0+Hibernate3.3框架

    - Hibernate3.3还支持Entity Manager,它是JPA(Java Persistence API)的一部分,提供了对持久化层的抽象,使得应用程序可以与任何兼容的JPA提供者交互。 4. **数据库配置**: - 项目使用MySQL作为数据库,首先...

    spring整合JPA

    - **实体关系(Association)**: 包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系,通过这些注解定义实体间的关联。 - **属性映射(Field Mapping)**: 使用 `@...

    SSH整合包(struts2,spring4.3.9,hibernate5)

    Hibernate5提供了更高效的性能和更多的新特性,如二级缓存支持和对JPA 2.1规范的兼容。在SSH整合包中,Hibernate负责与数据库的交互,通过对象模型将数据库操作转化为简单的Java代码。 SSH整合的关键在于配置。通常...

    Spring4.2.5+Hibernate4.3.11组合开发

    这个版本的Spring增强了对Java 8的支持,改进了Web MVC框架,以及优化了对其他库的集成,如JDBC、JPA和Hibernate。 Hibernate 4.3.11则是一个流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理...

    Struts2.0+spring2.5+hibernate3.2

    Spring2.5引入了更多对JSR-303 Bean Validation的支持,改进了AOP,以及对其他框架如Hibernate的更深度集成。Spring还提供了数据访问抽象,如JDBC模板,以及对各种ORM框架的集成,包括Hibernate。 **Hibernate3.2**...

    springjpa 和 spring多视图配置实例

    本实例探讨的是如何在Spring环境中整合Spring MVC、Spring Data JPA以及使用Freemarker或JSON作为多视图配置。让我们深入理解这些技术及其相互作用。 首先,Spring MVC是Spring框架的一部分,专门用于构建Web应用...

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用所需jar包

    SSH是Java开发中的一种经典企业级应用框架,由Struts2、Hibernate和Spring三个开源框架组合而成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,持久层管理,以及服务层的实现,使得开发高效且灵活。下面我们...

    spring boot 整合JPA及使用方法

    JPA支持各种关系映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。通过这些注解,开发者可以清晰地定义实体间的关系,使得数据库操作更加直观和方便。 8. 实体...

    Spring-data-jpa常用教程.pdf

    JPA 作为 Java 平台的一种标准,旨在为 Java 应用程序提供一种通用的对象关系映射 (ORM) 解决方案,以减少对 SQL 查询语言的依赖。虽然 JPA 提供了一个强大的 ORM 框架标准,但实际的实现通常由像 Hibernate 这样的...

    Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

    本项目旨在通过一个具体的案例来演示如何将 Spring Boot 1.5.2、Spring Security 4 以及 Spring Data JPA 进行整合。这三个框架都是当前 Java Web 开发领域内非常流行的工具和技术,它们能够极大地提高开发效率,...

    Struts2 Spring3 Hibernate3 整合必须包(很完整)

    Struts2是一个基于MVC设计模式的Web应用框架,它继承了Struts1的优点,并引入了更多现代Web开发的特性。Struts2的核心是Action,它负责接收HTTP请求,执行业务逻辑,并返回结果到视图。Struts2通过拦截器...

    spring Spring MVC Hibernate 4.x 整合案例

    在这个整合案例中,我们将看到如何配置Spring、Spring MVC和Hibernate,以实现一个包含增删查改(CRUD)功能的应用。首先,你需要设置项目的基本结构,创建相应的目录和文件,如src/main/java用于存放Java源代码,...

Global site tag (gtag.js) - Google Analytics