hibernate注解解析

最近学习hibernate注解形式配置POJO类,将注解的解析记下来,以备以后使用。

例1.

@Entity@Table(name="user") 
public class Flight implements Serializable {   
    Long id;

    @Id    @GeneratedValue(generator="generator")    @GenericGenerator(name="generator", strategy = "native")
    public Long getId() { return id; } 
    public void setId(Long id)
    { this.id = id; } 
}

Hibernate 可以对类的属性或者方法进行注解。属性对应field类别,方法的 getXxx()对应property类别。

@Entity

声明一个类为实体Bean。

@Table

说明此实体类映射的表名,目录,schema的名字。

@Id

声明此表的主键。

@GeneratedValue

定义主键的增长策略。我这里一般交给底层数据库处理,所以调用了名叫generator的增长方式,由下边的@GenericGenerator实现

@GenericGenerator

hibernate内部的主键增长方式.

关于@GeneratedValue@GenericGenerator的详细说明,在我的另一篇转载的文章里边有。
@GeneratedValue 与 @GenericGenerator

例2.

@Table(name="tbl_sky",
  uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})} )

@UniqueConstraint

将对应的字段设置唯一性标识

例3.

1 public class Flight implements Serializable {
2    @Version 
3    @Column(name="OPTLOCK") 
4     public Integer getVersion() {} } 

@Version

注解用于支持乐观锁版本控制。一般可以用 数字 或者 timestamp 类型来支持 version.

@Column

用于映射对应的字段,其中参数详解如下:

name = "columnName";                                (1)
        boolean unique() default false;                      (2)
        boolean nullable() default true;                     (3)
        boolean insertable() default true;                  (4)
        boolean updatable() default true;                 (5)
        String columnDefinition() default "";            (6)
        String table() default "";                                (7)
        int length() default 255;                                (8)
        int precision() default 0;                               (9)
        int scale() default 0;                                     (10)
(1)     name 可选,列名(默认值是属性名)
(2)     unique 可选,是否在该列上设置唯一约束(默认值false)
(3)     nullable 可选,是否设置该列的值可以为空(默认值true)
(4)     insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
(5)     updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
(6)     columnDefinition 可选,为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)
(7)     table 可选,定义对应的表(默认为主表)
(8)     length 可选,列长度(默认值255)
(9)     precision 可选,列十进制精度(decimal precision)(默认值0)
(10)   scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)

例4.

public class user
{
    @Transient
    private Integer id;
    @Basic(fetch=FetchType.LAZY,optional=true)
    private String name;

    @Transient
    public Integer getId() {}    @Temporal(TemporalType.TIME)    public java.util.Date getDatetime() {};
}

@Transient
     被注解成 @Transient 的 getter 方法或属性,将不会被持久化,

@Basic
    所有没有定义注解的属性,等价于在其上面添加了 @Basic注解可以声明属性的获取策略 ( fetch strategy )

fetch:抓取策略,延时加载与立即加载,optional:指定在生成数据库结构时字段是否允许为 null.

@Temporal

在核心的 Java API 中并没有定义时间精度 ( temporal precision )。因此处理时间类型数据时,你还需要定义将其存储在数据库中所预期的精度。
    在数据库中,表示时间类型的数据有 DATE,TIME,和 TIMESTAMP 三种精度 ( 即单纯的日期,时间,或者两者兼备 )。 可使用 @Temporal 注解来调整精度。

其他属性:

@Enumerated
@javax.persistence.Enumerated(EnumType.STRING)
value:EnumType.STRING,EnumType.ORDINAL
枚举类型成员属性映射,EnumType.STRING指定属性映射为字符串,EnumType.ORDINAL指定属性映射为数据序

@Lob
@javax.persistence.Lob
用于标注字段类型为Clob和Blob类型
Clob(Character Large Ojects)类型是长字符串类型,实体的类型可为char[]、Character[]、或者String类型
Blob(Binary Large Objects)类型是字节类型,实体的类型可为byte[]、Byte[]、或者实现了Serializable接口的类。
通常使用惰性加载的方式, @Basic(fetch=FetchType.LAZY)

@SecondaryTable 
@javax.persistence.SecondaryTable
将一个实体映射到多个数据库表中
如:
@Entity
@SecondaryTables({ 
@SecondaryTable(name = "Address"), 
    @SecondaryTable(name = "Comments") 
})
public class Forum implements Serializable {
@Column(table = "Address", length = 100) 
private String street; 
@Column(table = "Address", nullable = false) 
private String city; 
@Column(table = "Address") 
private String conutry; 
@Column(table = "Comments") 
private String title; 
@Column(table = "Comments") 
private String Comments; 
@Column(table = "Comments") 
}
table属性的值指定字段存储的表名称
没有用 @Column 注解改变属性默认的字段将会存在于 Forum 表

时间: 2024-12-20 01:04:47

hibernate注解解析的相关文章

Hibernate注解总结:

Hibernate注解总结: 首先我们都知道Hibernate框架是持久层的一个框架,用于对数据的访问和操作.个人觉得其强大就在于它可以使用HQL语句来进行快速的增.删.改的操作,也可以使用Sql语句来进行数据操作,很是方便快捷,备受大型项目青睐,之前所做的都是用的MyBatis感觉比MyBatis要方便些.但是有些人会认为说开发人员理应熟练使用sql语句,对MyBatis更欢迎.智者见智仁者见仁.我就从我平时使用的注解说起吧: @id:这个想必大家都不会陌生的,在实体类中定以主键的标识. @E

hibernate注解

慕课网:http://www.imooc.com/learn/524 一.类级别注解 简介 使用注解的目的:为了简化繁琐的ORM映射文件(*.hbm)的配置 JPA(Java Persistence API)与hibernate的关系:JPA是标准接口,hibernate是实现(hibernate的功能是jpa的超集,功能更强大) hibernate如何实现与JPA的关系:通过hibernate-annotation.hibernate-entitymanager.hibernate-core三

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

(十) 使用Hibernate 注解

Hibernate里有两种注解 : Hibernate 注解 JPA注解 主键生成机制 : http://www.cnblogs.com/ph123/p/5692194.html 案例一:   用注解对非复合主键的表生成配置文件 package bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.p

关于hibernate注解的简单应用

@Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执行 @After 用途:单测方法走之后执行 注解的目标:替换小配置.替换hbm文件 @Entity  :标识实体类(被持久化) @Table  :DB层表的名称 @Transient :不持久化某个属性 @Column:数据表中的字段名 @GenerateValue :主键生成策略 -----------------关联--------------------------

Hibernate映射解析——七种映射关系

        ORM,全称是(Object Relational Mapping),即对象关系映射.ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作.Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作.    Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java).映射文件(*.hbm.xml)和数据库配置文件(*.properties/*.cfg

Hibernate注解映射联合主键的三种主要方式(转载)

转自:http://blog.csdn.net/robinpipi/article/details/7655388 联合主键用hibernate注解映射方式主要有三种:第一.将联合主键的字段单独放在一个类中,该类需要实现Java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id 第二.将联合主键的字段单独放在一个类中,

【学习笔记】Hibernate 注解 (Y2-1-9)

Hibernate注解 1.什么是注解在类上或者方法上打上其他类型的类型元数据 @标志 使用过的注解: @override  方法重写 @Test Junit 单元测试 @Before 单元测试 @After 单元测试 Hibernate中常用的注解 [email protected] 将一个类声明为持久化类 [email protected] 声明持久化类的标识属性 [email protected] 定义标识属性值的生成策略,默认为native [email protected] 将属性映射

SHOP++ 中Hibernate 注解 用法

最近接触到一款JAVA开源软件(shop++)这是一款电商软件.然后看了这款软件的源代码,发现真的很强大.框架采用的是spring mvc + hibernate + freemarker ,代码结构层次分明,代码封装和重用性也很高.非常适合二次开发.其次重点说说hibernate 注解吧 数据库表采用的是hibernate注解映射的方式.然后略微研究了下,分享一下自己的见解. @Entity说明此类是一个实体映射 @Tabletable用来定义entity主表的name,cataloh,sch