zoukankan      html  css  js  c++  java
  • hibernate用注解配置实体类的映射

    一、注解类

    1. @Table
    
    声明了该实体bean映射指定的表(table),目录(catalog)和schema名字
    
    2. @Id
    
    声明了该实体bean的标识属性(对应表中的主键)。
    
    3. @Column
    
    声明了属性到列的映射。该注解有如下的属性:
    
    name 可选,列名(默认值是属性名)
    
    unique 可选,是否在该列上设置唯一约束(默认值false)
    
    nullable 可选,是否设置该列的值可以为空(默认值false)
    
    insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
    
    updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
    
    columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植)
    
    table 可选,定义对应的表(默认为主表)
    
    length 可选,列长度(默认值255)
    
    precision 可选,列十进制精度(decimal precision)(默认值0)
    
    scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)
    
    4. @GeneratedValue
    
    声明了主键的生成策略。该注解有如下属性:
    
    strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO
    
    GenerationType.AUTO 主键由程序控制
    
    GenerationType.TABLE 使用一个特定的数据库表格来保存主键
    
    GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)
    
    GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中的序列)。
    
    5. GenericGenerator
    
    声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性:
    
    name 指定生成器名称,它被应用于@GeneratedValue的generator的值。
    
    strategy 指定具体生成器的类名(指定生成策略)。
    
    parameters 得到strategy指定的具体生成器所用到的参数。
    
    6. @Transient
    
    声明了非持久化属性,即数据库中没有相应的映射字段,是一个普通属性。
    
    7. @Temporal
    
    声明了日期类型。
    
    TemporalType.DATE 日期,例:2011-04-12
    
    TemporalType.TIME 时间,例:22:50:30
    
    TemporalType.TIMESTAMP 日期和时间,例:2011-04-12 22:51:30

    二、看例子

    Role.class

    @Entity
    @Table(name="role")
    public class Role implements Serializable{
    
        private String roleId;
        private String roleName;
        @Id
        @Column(name="roleid")
        @GenericGenerator(name="generator", strategy = "uuid.hex")
        @GeneratedValue(generator="generator")
        public String getRoleId() {
            return roleId;
        }
        public void setRoleId(String roleId) {
            this.roleId = roleId;
        }
        @Column(name="rolename")
        public String getRoleName() {
            return roleName;
        }
        public void setRoleName(String roleName) {
            this.roleName = roleName;
        }
        
    }

    Student.class

    @Entity        
    @Table(name="student")    
    public class Student implements Serializable{
        
        private String stuId;
        private String stuName;
        private Role role;
        
        @Id
        @Column(name="stuid")
        @GenericGenerator(name="generator",strategy="uuid.hex")
        @GeneratedValue(generator="generator")
        public String getStuId() {
            return stuId;
        }
        public void setStuId(String stuId) {
            this.stuId = stuId;
        }
        @Column(name="stuno")
        public String getStuNo() {
            return stuName;
        }
        public void setStuNo(String stuNo) {
            this.stuName = stuNo;
        }
    }

    三、在spring容器的配置

    实体类写好之后,需要在spring容器中加载,在配置sessionFactory时进行配置,有两种配置的方式

    1、使用annotatedClasses

            <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
            <property name="dataSource" ref="dataSource" />  
                <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                </props>
            </property>
            <!-- <property name="packagesToScan"  value="com.demo.entity"/> -->
            <property name="annotatedClasses">
                <list>
                    <value>com.demo.entity.Role</value>
                    <value>com.demo.entity.Student</value>
                </list>
            </property>
        </bean> 

    2、使用packagesToScan直接对实体类进行扫描

            <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
            <property name="dataSource" ref="dataSource" />  
                <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                </props>
            </property>
            <property name="packagesToScan"  value="com.demo.entity"/>
        </bean>
  • 相关阅读:
    uvaoj 401 Palindromes
    ThinkPHP框架研究之一 基本函数 M和D的区别
    camera
    总结
    安装ecshop出错
    在MySQL数据库建立多对多的数据表关系
    北京周边骑行路线总结
    解决PowerDesigner中DBMS设置的问题(Repost)
    zendstudio 汉化
    JavaScript高级程序设计-13:事件
  • 原文地址:https://www.cnblogs.com/yxjdragon/p/5910069.html
Copyright © 2011-2022 走看看