* @Entity —— 将一个类声明为一个实体 bean(即一个持久化 POJO
类)
* @Id —— 注解声明了该实体 bean 的标识属性(对应表中的主
键)。
* @Table —— 注解声明了该实体 bean 映射指定的表(table),目录
(catalog)和 schema 的名字
* @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)
* @GeneratedValue —— 注解声明了主键的生成策略。该注解有如下属

* strategy 指定生成的策略(JPA 定义的),这是一个 GenerationType。
默认是 GenerationType. AUTO
* GenerationType.AUTO 主键由程序控制
* GenerationType.TABLE 使用一个特定的数据库表格来保存主键
* GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类
型)
* GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是
数据库支持序列。(这个值要与 generator 一起使用)
* generator 指定生成主键使用的生成器(可能是 orcale 中的序
列)。
* @SequenceGenerator —— 注解声明了一个数据库序列。该注解有如
下属性
* name 表示该表主键生成策略名称,它被引用在@GeneratedValue 中设
置的“gernerator”值中
* sequenceName 表示生成策略用到的数据库序列名称。
* initialValue 表示主键初始值,默认为 0.
* allocationSize 每次主键值增加的大小,例如设置成 1,则表示每次
创建新记录后自动加 1,默认为 50.
* @GenericGenerator —— 注解声明了一个 hibernate 的主键生成策略。
支持十三种策略。该注解有如下属性
* name 指定生成器名称
* strategy 指定具体生成器的类名(指定生成策略)。
* parameters 得到 strategy 指定的具体生成器所用到的参数。
* 其十三种策略(strategy 属性的值)如下:
* 1.native 对于 orcale 采用 Sequence 方式,对于 MySQL 和
SQL Server 采用 identity(处境主键生成机制),
* native 就是将主键的生成工作将由数据库完成,hibernate 不
管(很常用)
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenera
tor", strategy = "native")
* 2.uuid 采用 128 位的 uuid 算法生成主键,uuid 被编码为
一个 32 位 16 进制数字的字符串。占用空间大(字符串类型)。
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenera
tor", strategy = "uuid")
* 3.hilo 要在数据库中建立一张额外的表,默认表名为
hibernate_unque_key,默认字段为 integer 类型,名称是 next_hi(比较
少用)
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGen
erator", strategy = "hilo")
* 4.assigned 在插入数据的时候主键由程序处理(很常用),
这是<generator>元素没有指定时的默认生成策略。等同于 JPA 中的
AUTO。
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenera
tor", strategy = "assigned")
* 5.identity 使用 SQL Server 和 MySQL 的自增字段,这个
方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定 sequence(MySQL
和 SQL Server 中很常用)。等同于 JPA 中的 IDENTITY
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenera
tor", strategy = "identity")
* 6.select 使用触发器生成主键(主要用于早期的数据库主
键生成机制,少用)
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenera
tor", strategy = "select")
* 7.sequence 调用谨慎数据库的序列来生成主键,要设定序
列名,不然 hibernate 无法找到。
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strat
egy = "sequence",
* parameters = { @Parameter(name = "sequence", value
= "seq_payablemoney") })
* 8.seqhilo 通过 hilo 算法实现,但是主键历史保存在 Sequence 中,
适用于支持 Sequence 的数据库,如 Orcale(比较少用)
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strat
egy = "seqhilo",
* parameters = { @Parameter(name = "max_lo", value =
"5") })
* 9.increnment 插入数据的时候 hibernate 会给主键添加一个自增
的主键,但是一个 hibernate 实例就维护一个计数器,所以在多个实例运行
的时候不能使用这个方法。
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenera
tor", strategy = "increnment")
* 10.foreign 使用另一个相关的对象的主键。通常和<one-
to-one>联合起来使用。
* 例:@Id
* @GeneratedValue(generator = "idGenerator")
* @GenericGenerator(name = "idGenerator", strategy = "
foreign",
* parameters = { @Parameter(name = "property
", value = "info") })
* Integer id;
* @OneToOne
* EmployeeInfo info;
* 11.guid 采用数据库底层的 guid 算法机制,对应 MySQL 的 uuid()
函数,SQL Server 的 newid()函数,ORCALE 的 rawtohex(sys_guid())函数

* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strat
egy = "guid")
* 12.uuid.hex 看 uudi,建议用 uuid 替换
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strat
egy = "uuid.hex")
* 13.sequence-identity sequence 策略的扩展,采用立即检索策略
来获取 sequence 值,需要 JDBC3.0 和 JDK4 以上(含 1.4)版本
* 例:
@GeneratedValue(generator = "paymentableGenerator")
* @GenericGenerator(name = "paymentableGenerator", strat
egy = "sequence-identity",
* parameters = { @Parameter(name = "sequence
", value = "seq_payablemoney") })
*
* @OneToOne 设置一对一个关联。cascade 属性有五个值(只有
CascadeType.ALL 好用?很奇怪),分别是 CascadeType.PERSIST(级联新建),
CascadeType.REMOVE(级联删除),CascadeType.REFRESH(级联刷新),
CascadeType.MERGE(级联更新),CascadeType.ALL(全部四项)
* 方法一
* 主表: ?@OneToOne(cascade = CascadeType.ALL)
* @PrimaryKeyJoinColumn
* public 从表类 get 从表类(){return 从表对象}
* 从表:没有主表类。
* 注意:这种方法要求主表与从表的主键值想对应。
* 方法二
* 主表:?@OneToOne(cascade = CascadeType.ALL)
* @JoinColumn(name="主表外键") //这里指定的是
数据库中的外键字段。
* public 从表类 get 从表类(){return 从表
类}
* 从表:@OneToOne(mappedBy = "主表类中的从表属性")//
例主表 User 中有一个从表属性是 Heart 类型的 heart,这里就填
heart
* public 主表类 get 主表类(){return 主表对
象}
* 注意:@JoinColumn 是可选的。默认值是从表变量名+"_"+从
表的主键(注意,这里加的是主键。而不是主键对应的变量)。
* 方法三
* 主表:@OneToOne(cascade=CascadeType.ALL)
* @JoinTable( name="关联表名",
* joinColumns = @JoinColumn(name="主表外键"),
* inverseJoinColumns = @JoinColumns(name="从表外键
")
* )
* 从表:@OneToOne(mappedBy = "主表类中的从表属性")//
例主表 User 中有一个从表属性是 Heart 类型的 heart,这里就填
heart
* public 主表类 get 主表类(){return 主表对
象}
* @ManyToOne 设置多对一关联
* 方法一
* @ManyToOne(cascade={CasCadeType.PERSIST,CascadeType.MERGE
})
* @JoinColumn(name="外键")
* public 主表类 get 主表类(){return 主表对象}
* 方法二
* @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE
})
* @JoinTable(name="关联表名",
* joinColumns = @JoinColumn(name="主表外键"),
* inverseJoinColumns = @JoinColumns(name="从表外键")
* )
* @OneToMany 设置一对多关联。cascade 属性指定关联级别,参考
@OneToOne 中的说明。fetch 指定是否延迟加载,值为 FetchType.LAZY 表示
延迟,为 FetchType.EAGER 表示立即加载
* 方法一 使用这种配置,在为“一端”添加“多端”时,
不会修改“多端”的外键。在“一端”加载时,不会得到“多端”。如果使
用延迟加载,在读“多端”列表时会出异常,立即加载在得到多端时,是一
个空集合(集合元素为 0)。
* “一端”配置
* @OneToMany(mappedBy="“多端”的属性")
* public List<“多端”类> get“多端”列表(){return “多
端”列表}
* “多端”配置参考@ManyToOne.
* 方法二
* “一端”配置
* @OneToMany(mappedBy="“多端”的属性")
* @MapKey(name="“多端”做为 Key 的属性")
* public Map<“多端”做为 Key 的属性的类,主表类> get“多端”
列表(){return “多端”列表}
* “多端”配置参考@ManyToOne.
* 方法三 使用这种配置,在为“一端”添加“多端”时,可以修
改“多端”的外键。
* “一端”配置
* @OneToMany
* @JoinColumn(name="“多端”外键")
* public List<“多端”类> get“多端”列表(){return “多
端”列表}

hibernate 注释说明的更多相关文章

  1. Hibernate 注释用法

    注释 到现在为止,你已经看到 Hibernate 如何使用 XML 映射文件来完成从 POJO 到数据库表的数据转换的,反之亦然.Hibernate 注释是无需使用 XML 文件来定义映射的最新方法. ...

  2. Hibernate注释

    Hibernate注释映射一.PO类的基本注释1.@Entity:将pojo类标记成实体,可以指定一个name属性,指定实体类的名称.默认一该类的类名作为实体类的名称 2.@Table:注释改持久化类 ...

  3. hibernate 注释多表 级联操作

    一对多模型(单向) 说明: 一个客户对应多个地址,通过客户可以获得该客户的多个地址的信息.客户和地址是一对多的关系,并且客户与地址是单向关联的关系. 映射策略 # 外键关联:两个表的关系定义在一个表中 ...

  4. 图说hibernate注释--xml里配置参数(一)

    ****************************************************************************************[来自我另一博文]

  5. 图说hibernate注释--java里配置参数(一.1)

    **************************************************************[来自我另一博文]

  6. hibernate 注释 唯一键约束 uniqueConstraints

    @Table 注解包含一个schema和一个catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束. 如果是联合约束就用下面这种 @Table(name="tb ...

  7. Hibernate使用注释

    可以使用注释创建hibernate应用程序. 有许多注释可用于创建hibernate应用程序,如@Entity,@Id,@Table等. Hibernate注释基于JPA 2规范,并支持所有功能.所有 ...

  8. Hibernate入门与简谈

    Hibernate jdbc Java Databases Connectivity, 他是提供了一组Java API来访问关系数据库的Java程序.这些Java API 可以使Java应用程序执行S ...

  9. Spring+Struts2+Hibernate框架整合流程

    一:基本步骤 新建Maven项目,导入相关依赖(推荐) 在WEB-INF的web.xml中进行配置 ————–Hibernate配置 —————- 创建entity包,创建数据库相关实体类 根据实体类 ...

随机推荐

  1. Memcache基础教程

    Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可以应 ...

  2. Atitit vod click event design flow  视频点播系统点击事件文档

    Atitit vod click event design flow  视频点播系统点击事件文档 重构规划1 Click cate1 Click  mov4 重构规划 事件注册,与事件分发管理器分开 ...

  3. iOS中的预编译指令的初步探究

    目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...

  4. js 事件

    事件:一般用于浏览器与用户操作进行交互 js事件的三种模型:内联模型.脚本模型.DOM2模型 内联模型:事件处理函数是HTML标签的属性 <input type="button&quo ...

  5. Jquery判断数组中是否包含某个元素$.inArray()的用法

    判断数组里面是否包含某个元素可以使用 $.inArray("元素(字符串)",数组名称) 进行判断 ,当存在该元素(字符串)时,返回该元素在数组的下标,不存在时返回 -1 示例代码 ...

  6. Liferay7 BPM门户开发之43: Gradle依赖管理

    进入liferay v7.0,官方推荐使用Gradle进行依赖管理和发布,所以必须知道Gradle的用法,网上资料很多,不赘述 只写依赖管理的分类 一般用外部仓库依赖,也可以用本地文件依赖(依赖本地j ...

  7. :after和:before炫酷用法总结

    引入 提到伪类,在我的印象中最常用的不过是:hover.:active.:link.:visited,还有css3里的常用伪类选择器:last-child.:first-child.nth-child ...

  8. 序列sequence中的cache问题

    Oracle中序列Sequence的创建语法如下: CREATE SEQUENCE [ schema. ] sequence [ { INCREMENT BY | START WITH } integ ...

  9. javascript学习5

    JavaScript Array(数组)对象 数组对象的作用是:使用单独的变量名来存储一系列的值. 实例 创建数组 创建数组,为其赋值,然后输出这些值. For...In 声明 使用 for...in ...

  10. C#日期格式转换

    DateTime dt = DateTime.Now; // Label1.Text = dt.ToString();//2005-11-5 13:21:25 // Label2.Text = dt. ...