`
ajuanlong
  • 浏览: 107783 次
社区版块
存档分类
最新评论

Hibernate 的类型

 
阅读更多

基本值类型

内置的basic mapping types可以大致地分类为:

integer, long, short, float, double, character, byte, boolean, yes_no, true_false

这些类型都对应 Java 的原始类型或者其封装类,来符合(特定厂商的)SQL 字段类型。boolean, yes_notrue_false都是 Java 中boolean或者java.lang.Boolean的另外说法。

string

java.lang.StringVARCHAR(或者 Oracle 的VARCHAR2)的映射。

date, time, timestamp

java.util.Date和其子类到 SQL 类型DATETIMETIMESTAMP(或等价类型)的映射。

calendar, calendar_date

java.util.Calendar到 SQL 类型TIMESTAMPDATE(或等价类型)的映射。

big_decimal, big_integer

java.math.BigDecimaljava.math.BigIntegerNUMERIC(或者 Oracle 的NUMBER类型)的映射。

locale, timezone, currency

java.util.Localejava.util.TimeZonejava.util.CurrencyVARCHAR(或者 Oracle 的VARCHAR2类型)的映射。LocaleCurrency的实例被映射为它们的 ISO 代码。TimeZone的实例被影射为它的ID

class

java.lang.ClassVARCHAR(或者 Oracle 的VARCHAR2类型)的映射。Class被映射为它的全限定名。

binary

把字节数组(byte arrays)映射为对应的 SQL 二进制类型。

text

把长 Java 字符串映射为 SQL 的CLOB或者TEXT类型。

serializable

把可序列化的 Java 类型映射到对应的 SQL 二进制类型。你也可以为一个并非默认为基本类型的可序列化 Java 类或者接口指定 Hibernate 类型serializable

clob, blob

JDBC 类java.sql.Clobjava.sql.Blob的映射。某些程序可能不适合使用这个类型,因为 blob 和 clob 对象可能在一个事务之外是无法重用的。(而且, 驱动程序对这种类型的支持充满着补丁和前后矛盾。)

imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary

一般来说,映射类型被假定为是可变的 Java 类型,只有对不可变 Java 类型,Hibernate 会采取特定的优化措施,应用程序会把这些对象作为不可变对象处理。比如,你不应该对作为imm_timestamp映射的 Date 执行Date.setTime()。要改变属性的值,并且保存这一改变,应用程序必须对这一属性重新设置一个新的(不一样的)对象。

实体及其集合的唯一标识可以是除了binaryblobclob之外的任何基础类型。(联合标识也是允许的,后面会说到。)

org.hibernate.Hibernate中,定义了基础类型对应的Type常量。比如,Hibernate.STRING代表string类型。

自定义值类型

开发者创建属于他们自己的值类型也是很容易的。比如说,你可能希望持久化java.lang.BigInteger类型的属性,持久化成为VARCHAR字段。Hibernate没有内置这样一种类型。自定义类型能够映射一个属性(或集合元素)到不止一个数据库表字段。比如说,你可能有这样的 Java 属性:getName()/setName(),这是java.lang.String类型的,对应的持久化到三个字段:FIRST_NAMEINITIALSURNAME

要实现一个自定义类型,可以实现org.hibernate.UserTypeorg.hibernate.CompositeUserType中的任一个,并且使用类型的 Java 全限定类名来定义属性。请查看org.hibernate.test.DoubleStringType这个例子,看看它是怎么做的。

<propertyname="twoStrings"type="org.hibernate.test.DoubleStringType"><columnname="first_string"/><columnname="second_string"/></property>

注意使用<column>标签来把一个属性映射到多个字段的做法。

CompositeUserTypeEnhancedUserTypeUserCollectionTypeUserVersionType接口为更特殊的使用方式提供支持。

你甚至可以在一个映射文件中提供参数给一个UserType。 为了这样做,你的UserType必须实现org.hibernate.usertype.ParameterizedType接口。为了给自定义类型提供参数,你可以在映射文件中使用<type>元素。

<propertyname="priority"><typename="com.mycompany.usertypes.DefaultValueIntegerType"><paramname="default">0</param></type></property>

现在,UserType可以从传入的Properties对象中得到default参数的值。

如果你非常频繁地使用某一UserType,可以为他定义一个简称。这可以通过使用<typedef>元素来实现。Typedefs 为一自定义类型赋予一个名称,并且如果此类型是参数化的,还可以包含一系列默认的参数值。

<typedefclass="com.mycompany.usertypes.DefaultValueIntegerType"name="default_zero"><paramname="default">0</param></typedef>
<propertyname="priority"type="default_zero"/>

也可以根据具体案例通过属性映射中的类型参数覆盖在 typedef 中提供的参数。

尽管 Hibernate 内建的丰富的类型和对组件的支持意味着你可能很少需要使用自定义类型。不过,为那些在你的应用中经常出现的(非实体)类使用自定义类型也是一个好方法。例如,一个MonetaryAmount类使用CompositeUserType来映射是不错的选择,虽然他可以很容易地被映射成组件。这样做的动机之一是抽象。使用自定义类型,以后假若你改变表示金额的方法时,它可以保证映射文件不需要修改。

分享到:
评论

相关推荐

    解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题

    - **自定义Type**:创建自定义的Hibernate类型,覆盖默认的日期时间处理方式,以满足特定需求。 以上就是关于"解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题"的详细分析和解决方案。在实际开发中,...

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    Hibernate学习笔记整理

    * Hibernate Type:需要查找该 Hibernate 类型对应的 Java 类型,从而再找到数据库类型 主键的产生器 * Increment:查找主键的最大值,在最大值的基础上加 1 * Assigned:由程序手动赋值 * Identity:支持主键自动...

    hibernate2json:使用通用的Hibernate类型映射JSON对象

    hibernate2json 该实现取自 要使用添加Maven依赖项,请执行以下操作: &lt; groupId&gt;com.github.alaptseu&lt;/ groupId&gt; &lt; artifactId&gt;hibernate2json &lt; version&gt;1.0 如果您喜欢快照版本: &lt; id&gt;oss....

    hibernate完整JAR包

    8. **类型转换**:hibernate-types-52.jar包含了一些自定义的Hibernate类型,用于处理如JSON、日期时间等复杂类型的数据。 9. **JPA规范**:如javax.persistence-api.jar,提供了JPA的规范接口,使得Hibernate可以...

    hibernate的知识总结

    - **Hibernate类型与Oracle数据类型的映射关系**:例如,`java.lang.Long` 对应于Oracle的 `NUMBER` 类型,`java.lang.String` 对应 `VARCHAR2`,`java.lang.Double` 对应 `NUMBER`,`java.sql.Timestamp` 对应 `...

    hibernate annotation 中文文档

    - `@Type`: 使用自定义的Hibernate类型,如日期时间格式等。 以上仅是Hibernate Annotation部分核心概念的简述,实际使用中还需要根据项目需求和最佳实践来灵活应用。深入理解和熟练掌握这些注解,能极大地提升...

    用Hibernate实现领域对象的自定义字段

    这时,我们需要创建自定义的Hibernate类型来处理这些特殊的字段。 创建自定义类型通常包括以下步骤: 1. **定义Java类**:为自定义字段创建一个Java类,这个类将封装特定的数据结构。例如,如果我们有一个日期范围...

    Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表

    这里,我们提到了一个名为“Hibernate的映射类型_hibernate_mysql映射类型.doc”的文档,这很可能是一个详细的对照表,列出了Hibernate如何将Java数据类型映射到MySQL数据库的SQL数据类型。MySQL是世界上最流行的...

    Hibernate中文API大全

    组件的属性可以是任意一种Hibernate类型(包括集合, 多对多关联, 以及其它组件等等)。嵌套组件不应该被当作一种特殊的应用(Nested components should not be considered an exotic usage)。 Hibernate倾向于支持...

    hibernate杂谈

    在这一部分,作者还介绍了一个自定义的Hibernate类型JsonType,它可以将对象列表转换为JSON字符串格式存储,并能够在需要时将这些字符串反序列化回对象列表。这种做法能够简化数据库模型,避免不必要的关联表查询。 ...

    Hibernate中数据类型

    Hibernate 提供了多种数据类型,用于匹配不同数据库系统支持的标准 SQL 数据类型。这些数据类型包括: - **数值类型**:例如,`byte` 和 `java.lang.Byte` 映射到 `TINYINT`,`short` 和 `java.lang.Short` 映射到 ...

    Hibernate 映射类型与Java 类型对照

    理解Hibernate映射类型与Java类型的对应关系对于有效地使用Hibernate至关重要。 首先,我们来看一下基本数据类型的映射。`integer`对应Java中的`int`或`Integer`,在SQL中映射为`INTEGER`类型;`long`对应`long`或`...

    Hibernate实战(第2版 中文高清版)

     5.2 Hibernate类型系统   5.2.1 概述实体和值类型   5.2.2 内建的映射类型   5.2.3 使用映射类型   5.3 创建定制的映射类型   5.3.1 考虑定制的映射类型   5.3.2 扩展点   5.3.3 定制映射类型的案例...

    基于Struts2+Hibernate的登录注册系统

    在Hibernate中,这可能通过自定义的Hibernate类型或者在保存前使用Java的`PasswordEncoder`接口进行实现。同时,系统应该有防止SQL注入的措施,例如使用预编译的SQL语句或使用Hibernate的参数化查询。 在实际运行时...

    hibernate 杂谈

    一个更简洁的解决方案是将这些数据存储为JSON格式,并利用自定义的Hibernate类型进行转换。例如,在OrderModel类中,可以定义一个字段`favorableDescList`,使用`@Type(type = ...

    Hibernate的char问题.txt

    为了更精确地控制 `char` 类型的处理方式,可以考虑使用 Hibernate 提供的自定义类型,比如 `CharacterType` 或者自定义实现 `org.hibernate.usertype.UserType` 接口来创建自定义的类型转换器。 ##### 3. 参数绑定...

    马士兵java框架hibernate学习笔记

    - **Hibernate类型**:概述了Hibernate提供的各种内置数据类型及其用途。 以上是马士兵Java框架Hibernate学习笔记的主要知识点概览,涵盖了从基础配置到高级特性的一系列内容。对于初学者来说,这是一个很好的起点...

    Hibernate使用——自定义数据类型

    本篇文章将深入探讨如何在Hibernate中实现自定义数据类型。 首先,我们需要理解Hibernate是如何处理数据类型的。默认情况下,Hibernate使用Java的标准数据类型来映射数据库中的列。例如,Integer对应INT,String...

    Hibernate Reference Documentation(Hibernate参考手册)

    ##### 4.2 Hibernate类型 - **实体与值**:实体类与值类型的区别。 - **基本值类型**:如字符串、整型等。 - **持久化枚举类型**:将枚举类型映射到数据库。 - **自定义值类型**:允许开发者定义自己的类型转换器。...

Global site tag (gtag.js) - Google Analytics