配置spring整合jpa自动生成数据表

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/data/jpa 
        http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

    <!-- 扫描 @Server @Controller @Repository -->
    <context:component-scan base-package="cn.nwtxxb"/>

    <!-- 加载properties文件 -->
    <context:property-placeholder location="classpath:config.properties" />

    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- 整合jpa配置 -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="cn.nwtxxb.bos.domain"/>
        <property name="persistenceProvider">
            <bean class="org.hibernate.jpa.HibernatePersistenceProvider"/>
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="generateDdl" value="true"/>
                <property name="database" value="ORACLE"/>
                <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect"/>
                <property name="showSql" value="true"/>
            </bean>
        </property>
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
        </property>
        <property name="jpaPropertyMap">
            <map>
                <entry key="hibernate.query.substitutions" value="true 1,false 0"/>
                <entry key="hibernate.default_batch_fetch_size" value="16"/>
                <entry key="hibernate.max_fetch_depth" value="2"/>
                <entry key="hibernate.generate_statistics" value="true"/>
                <entry key="hibernate.bytecode.use_reflection_optimizer" value="true"/>
                <entry key="hibernate.cache.use_query_cache" value="false"/>
            </map>
        </property>
    </bean>

    <!-- jpa事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <!-- 注解管理事务 --> 
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- 整合spring data jpa -->
    <!-- <jpa:repository base-package="cn.nwtxxb.bos.dao"/> -->

</beans>

档案类Archive:

/**
 * @description:档案类,记录所有的分类信息,在子档中
 */
@Entity
@Table(name = "T_ARCHIVE")
public class Archive {
    @Id
    @GeneratedValue
    @Column(name = "C_ID")
    private Integer id; // 主键
    @Column(name = "C_ARCHIVE_NUM", unique = true )
    private String archiveNum;// 档案编号
    @Column(name = "C_ARCHIVE_NAME")
    private String archiveName; // 档案名称
    @Column(name = "C_REMARK")
    private String remark; // 备注
    @Column(name = "C_HASCHILD")
    private Integer hasChild;// 是否分级 0代表不分级 1代表分级
    @Column(name = "C_OPERATING_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date operatingTime;// 操作时间
    @Column(name = "C_OPERATOR")
    private String operator; // 操作员
    @Column(name = "C_OPERATING_COMPANY")
    private String operatingCompany; // 操作单位

    @OneToMany(mappedBy = "archive")
    private Set<SubArchive> subArchives = new HashSet<>(); // 子档案
}

区域Area类:

/**
 * @description:地域信息实体类,主要包含 省市区(县)
 */
@Entity
@Table(name = "T_AREA")
public class Area {

    @Id
    @Column(name = "C_ID")
    private String id;
    @Column(name = "C_PROVINCE")
    private String province; // 省
    @Column(name = "C_CITY")
    private String city; // 城市
    @Column(name = "C_DISTRICT")
    private String district; // 区域
    @Column(name = "C_POSTCODE")
    private String postcode; // 邮编
    @Column(name = "C_CITYCODE")
    private String citycode; // 城市编码
    @Column(name = "C_SHORTCODE")
    private String shortcode; // 简码

    @OneToMany(mappedBy = "area")
    private Set<SubArea> subareas = new HashSet<SubArea>();
}

快递员类Courier

/**
 * @description:快递员
 */
@Entity
@Table(name = "T_COURIER")
public class Courier {

    @Id
    @GeneratedValue
    @Column(name = "C_ID")
    private Integer id; // 主键
    @Column(name = "C_COURIER_NUM", unique = true)
    private String courierNum; // 快递员工号
    @Column(name = "C_NAME")
    private String name; // 快递员姓名
    @Column(name = "C_TELEPHONE")
    private String telephone; // 快递员联系电话
    @Column(name = "C_PDA")
    private String pda; // PDA号
    @Column(name = "C_DELTAG")
    private Character deltag; // 作废标志 1 为标记作废
    @Column(name = "C_CHECK_PWD")
    private String checkPwd; // 查台密码
    @Column(name = "C_TYPE")
    private String type; // 取件员类型
    @Column(name = "C_COMPANY")
    private String company; // 单位
    @Column(name = "C_VEHICLE_TYPE")
    private String vehicleType; // 车辆类型
    @Column(name = "C_VEHICLE_NUM")
    private String vehicleNum; // 车牌号

    @ManyToOne
    @JoinColumn(name = "C_STANDARD_ID")
    private Standard standard;

    @ManyToOne
    @JoinColumn(name = "C_TAKETIME_ID")
    private TakeTime takeTime;

    @ManyToMany(mappedBy = "couriers")
    private Set<FixedArea> fixedAreas = new HashSet<FixedArea>();
}

定区FixedArea类:

/**
 * @description:定区
 */
@Entity
@Table(name = "T_FIXED_AREA")
public class FixedArea {

    @Id
    @Column(name = "C_ID")
    private String id; // 主键
    @Column(name = "C_FIXED_AREA_NAME", unique = true)
    private String fixedAreaName; // 定区名称
    @Column(name = "C_FIXED_AREA_LEADER", unique = true)
    private String fixedAreaLeader;// 定区负责人
    @Column(name = "C_TELEPHONE")
    private String telephone;// 联系电话
    @Column(name = "C_COMPANY")
    private String company; // 所属单位

    @Column(name = "C_OPERATING_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date operatingTime;// 操作时间
    @Column(name = "C_OPERATOR")
    private String operator; // 操作员
    @Column(name = "C_OPERATING_COMPANY")
    private String operatingCompany; // 操作单位

    @OneToMany(mappedBy = "fixedArea")
    private Set<SubArea> subareas = new HashSet<SubArea>(0);

    @ManyToMany
    @JoinTable(name = "T_FIXEDAREA_COURIER", joinColumns = { @JoinColumn(name = "C_FIXED_AREA_ID", referencedColumnName = "C_ID") }, inverseJoinColumns = { @JoinColumn(name = "C_COURIER_ID", referencedColumnName = "C_ID") })
    private Set<Courier> couriers = new HashSet<Courier>(0);
}

收派标准Standard类

/**
 * @description:收派标准
 */
@Entity
@Table(name = "T_STANDARD")
public class Standard {
    @Id
    @GeneratedValue
    @Column(name = "C_ID")
    private Integer id; // 主键
    @Column(name = "C_NAME")
    private String name; // 标准名称
    @Column(name = "C_MIN_WEIGHT")
    private Integer minWeight; // 最小重量
    @Column(name = "C_MAX_WEIGHT")
    private Integer maxWeight; // 最大重量
    @Column(name = "C_MIN_LENGTH")
    private Integer minLength; // 最小长度
    @Column(name = "C_MAX_LENGTH")
    private Integer maxLength; // 最大重量
    @Column(name = "C_OPERATING_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date operatingTime;// 操作时间
    @Column(name = "C_OPERATOR")
    private String operator; // 操作员
    @Column(name = "C_OPERATING_COMPANY")
    private String operatingCompany; // 操作单位
}

子档案SubArchive类:

/**
 * @description:子档案类,记录了档案分级后的子信息
 */
@Entity
@Table(name = "T_SUB_ARCHIVE")
public class SubArchive {
    @Id
    @GeneratedValue
    @Column(name = "C_ID")
    private Integer id; // 主键
    @Column(name = "C_SUB_ARCHIVE_NAME")
    private String subArchiveName; // 子档名称
    @Column(name = "C_MNEMONIC_CODE")
    private String mnemonicCode; // 助记码
    @Column(name = "C_REMARK")
    private String remark; // 备注
    @Column(name = "C_MOTHBALLED")
    private Character mothballed; // 封存标志
    @Column(name = "C_OPERATING_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date operatingTime;// 操作时间
    @Column(name = "C_OPERATOR")
    private String operator; // 操作员
    @Column(name = "C_OPERATING_COMPANY")
    private String operatingCompany; // 操作单位

    @ManyToOne
    @JoinColumn(name = "C_ARCHIVE_ID")
    private Archive archive; // 关联基本档案信息
}

分区SubArea类

/**
 * @description:分区
 */
@Entity
@Table(name = "T_SUB_AREA")
public class SubArea {

    @Id
    @Column(name = "C_ID")
    private String id;
    @Column(name = "C_START_NUM")
    private String startNum; // 起始号
    @Column(name = "C_ENDNUM")
    private String endNum; // 终止号
    @Column(name = "C_SINGLE")
    private Character single; // 单双号
    @Column(name = "C_KEY_WORDS")
    private String keyWords; // 关键字
    @Column(name = "C_ASSIST_KEY_WORDS")
    private String assistKeyWords; // 辅助关键字

    @ManyToOne
    @JoinColumn(name = "C_AREA_ID")
    private Area area; // 区域
    @ManyToOne
    @JoinColumn(name = "C_FIXEDAREA_ID")
    private FixedArea fixedArea; // 定区
}

收派时间TakeTime类

/**
 * @description:收派时间管理
 */
@Entity
@Table(name = "T_TAKE_TIME")
public class TakeTime {
    @Id
    @GeneratedValue
    @Column(name = "C_ID")
    private Integer id; // 主键
    @Column(name = "C_NAME")
    private String name; // 收派时间名称
    @Column(name = "C_NORMAL_WORK_TIME")
    private String normalWorkTime; // 平常上班时间
    @Column(name = "C_NORMAL_DUTY_TIME")
    private String normalDutyTime; // 平常下班时间
    @Column(name = "C_SAT_WORK_TIME")
    private String satWorkTime; // 周六上班时间
    @Column(name = "C_SAT_DUTY_TIME")
    private String satDutyTime; // 周六下班时间
    @Column(name = "C_SUN_WORK_TIME")
    private String sunWorkTime; // 周日上班时间
    @Column(name = "C_SUN_DUTY_TIME")
    private String sunDutyTime; // 周日下班时间
    @Column(name = "C_STATUS")
    private String status; // 状态
    @Column(name = "C_COMPANY")
    private String company; // 所属公司

    @Column(name = "C_OPERATING_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date operatingTime;// 操作时间
    @Column(name = "C_OPERATOR")
    private String operator; // 操作员
    @Column(name = "C_OPERATING_COMPANY")
    private String operatingCompany; // 操作单位
}

车辆Vehicle类

/**
 * @description:车辆
 */
@Entity
@Table(name = "T_VEHICLE")
public class Vehicle {

    @Id
    @GeneratedValue
    @Column(name = "C_ID")
    private Integer id;
    @Column(name = "C_ROUTE_TYPE")
    private String routeType; // 线路类型
    @Column(name = "C_ROUTE_NAME")
    private String routeName; // 线路名称
    @Column(name = "C_SNIPPER")
    private String shipper; // 承运商
    @Column(name = "C_DRIVER")
    private String driver; // 司机
    @Column(name = "C_VEHICLE_NUM")
    private String vehicleNum; // 车牌号
    @Column(name = "C_TELEPHONE")
    private String telephone; // 电话
    @Column(name = "C_VEHICLE_TYPE")
    private String vehicleType;// 车型
    @Column(name = "C_TON")
    private Integer ton; // 吨控
    @Column(name = "C_REMARK")
    private String remark;// 备注
}