花了三天时间总算把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 请按版本号到官网下载,否则总会出现一些莫名其妙的异常让你很郁闷。
- 大小: 47.8 KB
- 大小: 38.3 KB
分享到:
相关推荐
其中,“JSF + Spring + JPA”作为一种新兴的技术组合,正在逐渐取代传统的“SSH”(Struts + Spring + Hibernate)组合。这一新的技术栈不仅继承了Spring框架的强大功能,还充分利用了JavaServer Faces (JSF) 和 ...
在实际项目中,"spring+hibernate整合简单示例"可能包含以下内容:一个简单的Spring配置文件,定义了DataSource、SessionFactory、TransactionManager等bean;一个或多个DAO接口和其实现类,使用HibernateTemplate...
Spring整合JPA与MySQL是现代Java企业级应用中常见的数据持久化方案,它结合了Spring框架的灵活性和Java Persistence API(JPA)的强大功能,同时利用MySQL作为关系型数据库,提供高效、便捷的数据存储和查询能力。...
Spring框架提供了一个名为Spring Data JPA的模块,它实现了对JPA的全面支持。Spring Data JPA通过提供自动化的Repository接口实现,简化了数据访问层的开发。它允许我们仅定义Repository接口,而无需编写具体的DAO...
Spring Data JPA 是 Spring Data 框架的一个重要组成部分,它为 Java 持久层提供了一种基于 JPA(Java Persistence API)的简单、高效的解决方案。JPA 是 Java 标准,用于管理关系数据库中的对象,它通过 ORM(对象...
Spring Boot提供了快速启动和配置的机制,而Spring Data JPA则是Spring框架的一部分,专注于数据库交互,使得开发者可以使用更加高级、抽象的方式来操作数据库,无需编写大量的JDBC代码。本文将详细介绍如何在...
整合Spring MVC、Spring 5.x和Hibernate 5.x,我们可以构建一个强大的后端系统。首先,我们需要在Spring配置中声明Hibernate的DataSource和SessionFactory,然后通过Spring的JdbcTemplate或Hibernate的Session接口...
- Hibernate3.3还支持Entity Manager,它是JPA(Java Persistence API)的一部分,提供了对持久化层的抽象,使得应用程序可以与任何兼容的JPA提供者交互。 4. **数据库配置**: - 项目使用MySQL作为数据库,首先...
- **实体关系(Association)**: 包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系,通过这些注解定义实体间的关联。 - **属性映射(Field Mapping)**: 使用 `@...
Hibernate5提供了更高效的性能和更多的新特性,如二级缓存支持和对JPA 2.1规范的兼容。在SSH整合包中,Hibernate负责与数据库的交互,通过对象模型将数据库操作转化为简单的Java代码。 SSH整合的关键在于配置。通常...
这个版本的Spring增强了对Java 8的支持,改进了Web MVC框架,以及优化了对其他库的集成,如JDBC、JPA和Hibernate。 Hibernate 4.3.11则是一个流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理...
Spring2.5引入了更多对JSR-303 Bean Validation的支持,改进了AOP,以及对其他框架如Hibernate的更深度集成。Spring还提供了数据访问抽象,如JDBC模板,以及对各种ORM框架的集成,包括Hibernate。 **Hibernate3.2**...
本实例探讨的是如何在Spring环境中整合Spring MVC、Spring Data JPA以及使用Freemarker或JSON作为多视图配置。让我们深入理解这些技术及其相互作用。 首先,Spring MVC是Spring框架的一部分,专门用于构建Web应用...
SSH是Java开发中的一种经典企业级应用框架,由Struts2、Hibernate和Spring三个开源框架组合而成。这个框架集合提供了模型-视图-控制器(MVC)架构模式,持久层管理,以及服务层的实现,使得开发高效且灵活。下面我们...
JPA支持各种关系映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。通过这些注解,开发者可以清晰地定义实体间的关系,使得数据库操作更加直观和方便。 8. 实体...
JPA 作为 Java 平台的一种标准,旨在为 Java 应用程序提供一种通用的对象关系映射 (ORM) 解决方案,以减少对 SQL 查询语言的依赖。虽然 JPA 提供了一个强大的 ORM 框架标准,但实际的实现通常由像 Hibernate 这样的...
本项目旨在通过一个具体的案例来演示如何将 Spring Boot 1.5.2、Spring Security 4 以及 Spring Data JPA 进行整合。这三个框架都是当前 Java Web 开发领域内非常流行的工具和技术,它们能够极大地提高开发效率,...
Struts2是一个基于MVC设计模式的Web应用框架,它继承了Struts1的优点,并引入了更多现代Web开发的特性。Struts2的核心是Action,它负责接收HTTP请求,执行业务逻辑,并返回结果到视图。Struts2通过拦截器...
在这个整合案例中,我们将看到如何配置Spring、Spring MVC和Hibernate,以实现一个包含增删查改(CRUD)功能的应用。首先,你需要设置项目的基本结构,创建相应的目录和文件,如src/main/java用于存放Java源代码,...