首先,我们已经通过 传统的spring +hibernate方式构架成功了一个应用的后台体系。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans > <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事务拦截器bean需要依赖注入一个事务管理器 --> <property name="transactionManager"> <ref local="transactionManager"/> </property> <property name="transactionAttributes"> <!-- 下面定义事务传播属性--> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="change*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <!-- 定义自动代理BeanNameAutoProxyCreator --> <bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <!-- 指定对满足哪些bean name的bean自动生成业务代理 --> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> <property name="interceptorNames"> <list> <!-- 此处可增加其他新的Interceptor --> <value>transactionInterceptor</value> </list> </property> </bean> <bean id="McCityInfoDAO" class="com.firemax.manatee.hibernate.McCityInfoDAO"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <bean id="McMaterialInfoDAO" class="com.firemax.manatee.hibernate.McMaterialInfoDAO"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> </beans>
然后我们修改pojo的java类。加上注解。使起通过注解来取代原先要xxxx.hbm.xml里面配置的指向的数据库表单结构的信息。
package com.alcor.web.hibernate; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; /** * AlcorTCitys entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "alcor_t_citys", catalog = "alcorweb") public class AlcorTCitys implements java.io.Serializable { // Fields private String cityCode; private AlcorTProvinces alcorTProvinces; private String cityName; private Set<AlcotTDistrict> alcotTDistricts = new HashSet<AlcotTDistrict>(0); // Constructors /** default constructor */ public AlcorTCitys() { } /** minimal constructor */ public AlcorTCitys(String cityCode, AlcorTProvinces alcorTProvinces, String cityName) { this.cityCode = cityCode; this.alcorTProvinces = alcorTProvinces; this.cityName = cityName; } /** full constructor */ public AlcorTCitys(String cityCode, AlcorTProvinces alcorTProvinces, String cityName, Set<AlcotTDistrict> alcotTDistricts) { this.cityCode = cityCode; this.alcorTProvinces = alcorTProvinces; this.cityName = cityName; this.alcotTDistricts = alcotTDistricts; } // Property accessors @Id @Column(name = "city_code", unique = true, nullable = false, length = 32) public String getCityCode() { return this.cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "province_code", nullable = false) public AlcorTProvinces getAlcorTProvinces() { return this.alcorTProvinces; } public void setAlcorTProvinces(AlcorTProvinces alcorTProvinces) { this.alcorTProvinces = alcorTProvinces; } @Column(name = "city_name", nullable = false, length = 64) public String getCityName() { return this.cityName; } public void setCityName(String cityName) { this.cityName = cityName; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "alcorTCitys") public Set<AlcotTDistrict> getAlcotTDistricts() { return this.alcotTDistricts; } public void setAlcotTDistricts(Set<AlcotTDistrict> alcotTDistricts) { this.alcotTDistricts = alcotTDistricts; } }