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>
  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/softcsy/p/4366135.html
Copyright © 2011-2022 走看看