zoukankan      html  css  js  c++  java
  • 我所了解的Hibernate注解

    一,首先需要导入支持注解开发的jar包:

    hibernate-annotations.jar

    hibernate-commons-annotations.jar (Hibernate中支持注解开发的jar包)

     

    ejb3-persistence.jar(API规范的jar包)

     

    slf4j/slf4j-api-1.5.0.jar

    slf4j-log4j12-1.5.0.jar

    log4j-1.2.15.jar  (支持日志输出的jar包,注意版本的匹配)

     

            二,在Hibernate框架进行注解开发时,主要是代替实体和数据表的映射文件,而核心配置文件中的,数据库的连接等等,还是需要xml配置文件,进行配置的。先看一下Hibernate中常用的注解:

               1,@Entity : 表示当前的类为实体类,声明在类的前面。可以将当前类和数据库的表和字段进行关联映射。

     

               2,@Table:表示映射的表,声明在类的前面

     

               3,@Id:表示主键的映射,声明在主键的get方法前边,默认情况下主键利用assigned(用户提供)生成策略。如果想要设置API规范提供了四种主键生成策略:

    @GeneratedValue(strategy=GenerationType.AUTO)      相当于Hibernate框架的native主键生成策略

    @GeneratedValue(strategy=GenerationType.IDENTITY)  相当于Hibernate框架的identity主键生成策略,适用于MySQL,SQL Server

    @GeneratedValue(strategy=GenerationType.SEQUENCE)  相当于Hibernate框架的sequence主键生成策略,适用于Oracle,DB2

    @GeneratedValue(strategy=GenerationType.TABLE)     使用一张单表管理主键值。

             默认情况下API规范是不支持Hibernate框架中的uuid的主键生成策略,假如我们想要使用,需要我们进行增加主键生成器,如下:

    @GenericGenerator(name="hibernate-uuid",strategy="uuid")

    @GeneratedValue(generator="hibernate-uuid")

     

               4,@Column : 表示映射属性,和表的字段进行关联

     

               5,@ManyToOne : 表示映射关系中的多对一

     

               6,@JoinColumn : 表示外键映射属性,和表的外键字段进行关联

     

               7,@OneToMany : 表示映射关系中的一对多,这里需要注意,一对多时,外键的维护需要翻转交给多的一方进行维护,需要配置反转属性mappedBy,属性取值为多的一方的映 射属性名称。相当于xml配置文件中的Inverse="true"。

     

               8,@OrderBy : 表示排序字段

     

               9,@Transient : 表示声明瞬时属性,不和数据库的字段发生关联,也就是没有表中列与之映射。

     

             等等吧,其实我感觉这些属性和xml配置文件属性都是一一对应的,及时不一样,也会有与之类似的属性进行实现其功能,所以我们可以对比着使用。当然这里只是一些常用的,当我们需要时还需要我们查看文档进行编写。

          三,看一个简单的利用主键开发的实体类吧,这里就不需要我们再编写配置文件了:

    package com.lianpay.ams.business.pojo;
    
    import java.io.Serializable;
    import java.util.List;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.EnumType;
    import javax.persistence.Enumerated;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    
    import org.codehaus.jackson.annotate.JsonIgnore;
    
    import com.lianpay.ams.business.enums.AMSEnums.*;
    
    /**
     * 硬件设备实体类
     * @author chensy
     *
     */
    
    @Entity
    @Table(name = "dev_detail")
    public class DevDetail implements Serializable {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        @Id
        @Column(name = "dev_serialNO", length = 20)
        private String devSerialNo;                          //设备序列号
        
        @Column(name = "dev_IPAddr", length = 20)
        private String devIPAddr;                            //IP地址
        
        @Column(name = "dev_type", length = 1)
        @Enumerated(EnumType.ORDINAL)
        private DevType devType;                            //类型
        
        @Column(name = "mem_info", length = 20)
        private String memInfo;                             //内存信息
        
        @Column(name = "disk_info", length = 20)
        private String diskInfo;                           //硬盘信息
        
        @Column(name = "up_time", length = 10)
        private String upTime;                             //上架时间
        
        @Column(name = "os_info", length = 20)
        private String osInfo;                             //操作系统
        
        
        @JsonIgnore
        @Column(name = "net_area", length = 20)
        @Enumerated(EnumType.STRING)
        private NetArea netArea;                           //网络区域
        
        @Column(name = "phy_area", length = 20)
        private String phyArea;                           //物理区域
        
        @Column(name = "cpu_info", length = 20)
        private String cpuInfo;                            //CPU信息
        //状态
        @Column(name = "dev_status", length = 1)
        @Enumerated(EnumType.ORDINAL)
        private Status devStatus = Status.NORMAL;
        
        @JsonIgnore
        @OneToMany(targetEntity = HostDetail.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        @JoinColumn(name = "dev_serialNO")
        private List<DevDetail> devDetails;
        
        public String getDevSerialNo() {
            return devSerialNo;
        }
        public void setDevSerialNo(String devSerialNo) {
            this.devSerialNo = devSerialNo;
        }
        public String getDevIPAddr() {
            return devIPAddr;
        }
        public void setDevIPAddr(String devIPAddr) {
            this.devIPAddr = devIPAddr;
        }
        public String getMemInfo() {
            return memInfo;
        }
        public void setMemInfo(String memInfo) {
            this.memInfo = memInfo;
        }
        public String getDiskInfo() {
            return diskInfo;
        }
        public void setDiskInfo(String diskInfo) {
            this.diskInfo = diskInfo;
        }
        public String getUpTime() {
            return upTime;
        }
        public void setUpTime(String upTime) {
            this.upTime = upTime;
        }
        public String getOsInfo() {
            return osInfo;
        }
        public void setOsInfo(String osInfo) {
            this.osInfo = osInfo;
        }
        public String getPhyArea() {
            return phyArea;
        }
        public void setPhyArea(String phyArea) {
            this.phyArea = phyArea;
        }
        public String getCpuInfo() {
            return cpuInfo;
        }
        public void setCpuInfo(String cpuInfo) {
            this.cpuInfo = cpuInfo;
        }
        public List<DevDetail> getDevDetails() {
            return devDetails;
        }
        public void setDevDetails(List<DevDetail> devDetails) {
            this.devDetails = devDetails;
        }
        public Status getDevStatus() {
            return devStatus;
        }
        public void setDevStatus(Status devStatus) {
            this.devStatus = devStatus;
        }
        public DevType getDevType() {
            return devType;
        }
        public void setDevType(DevType devType) {
            this.devType = devType;
        }
        public NetArea getNetArea() {
            return netArea;
        }
        public void setNetArea(NetArea netArea) {
            this.netArea = netArea;
        }
    }
    View Code

          四,当然用了注解的开发方式,我们的核心配置文件就需要我修改了,这里就需要Hibernate的AnnotationSessionFactoryBean工厂类了,

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 配置自动扫描包下的实体,也可使用annotatedClasses属性进行单个实体配置-->
            <property name="packagesToScan">
                <list>
                    <value>com.lianpay.ams.*</value>
                </list>
            </property>
            <!-- 配置Hibernate属性 -->
            <property name="hibernateProperties">
                <props>
                    //...省略。。。
                </props>
            </property>
        </bean>
  • 相关阅读:
    求24点
    关于参数和返回值的常量性
    点到平面的距离公式
    大端序与小端序
    Quake3中的绝对值函数
    整数超出范围时如何表示?
    关于数组的几道面试题
    在移位数组中查找数
    时间复杂度O(n),空间复杂度O(1)的排序
    C++之对象切割
  • 原文地址:https://www.cnblogs.com/softcsy/p/4366135.html
Copyright © 2011-2022 走看看