`
tianhandigeng
  • 浏览: 374508 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate 枚举类型注解之annonation(转)

阅读更多

     实体Entity中通过@Enumerated标注枚举类型,例如将 CustomerEO实体中增加一个CustomerType类型的枚举型属性,标注实体后的代码如下所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

         private CustomerType type;

         @Enumerated(EnumType.STRING)

         public CustomerType getType() {

                   return type;

         }

         public void setType(CustomerType type) {

                   this.type = type;

         }

         public enum CustomerType {

                   COMPETITOR, INVESTOR, PARTNER, VENDER

         }

}

在实体中虽然标注成枚举类型,但当实体持久化后,表中所对应的值仍旧是基本的数据类型,以上代码创建表的SQL语句是:

CREATE TABLE customer (

         id int(20) NOT NULL auto_increment,

         name varchar(255),

         type varchar(255),

         PRIMARY KEY (id)

)

使用枚举类型后,在创建实体时便可以直接引用枚举类型,例如以下代码所示。

CustomerEO customer = new CustomerEO();

customer.setName("Janet2");

customer.setType(CustomerType.PARTNER);

entityManager.persist(customer);

在使用@Enumerated注释时,需要注意以下几个问题:

l         因为枚举类型的有名称和值两个属性,所以在持久化时可以选择持久化名称或是持久化值。通过EnumType来定义,它有两个值如下所示。

public enum EnumType {

ORDINAL,

STRING

}

ORDINAL表示持久化的为枚举类型的值,STRING表示持久化的为枚举类型的名称。默认为ORDINAL,持久化值。例如以上示例中标注的为 STRING,这样持久化实体后,数据库中保存的是枚举类型的名称,如图所示。


若此时改成ORDINAL,代码如下:

         @Enumerated(EnumType.ORDINAL)

         public CustomerType getType() {

                   return type;

         }

则同样持久化的实体后,数据库保存的结果如图所示。



l         如何选择STRING和ORDINAL:

如果使用STRING保存,虽然从数据库中查询数据时非常直观,能够清楚的看出该类型代表意义,但这样也会带来其他的问题。若此时枚举类型的定义改 变,例如上例中的枚举类型名称改为:

         public enum CustomerType {

                   CUST_COMPETITOR, INVESTOR, PARTNER, VENDER

         }

则此时数据库中保存的“COMPETITOR”的值将不能转化为枚举类型CustomerType中的“CUST_COMPETITOR”的值。但 若使用ORDINAL则不会带来这种问题。所以建议使用ORDINAL类型来持久化枚举类型。

l         枚举类型的定义位置,实体外部VS实体内部。

上例中CustomerType枚举类型定义在CustomerEO实体内部,这是因为只有CustomerEO这个实体会使用 CustomerType类型,其他的实体不会使用该类型。该类型与这个实体关系紧密联系。

但若此时多个实体公用一个枚举类型时,则可以将枚举类型单独定义,定义在实体的外部。有这样一个枚举类型BusinessLine,它定义在实体外 部,代码如下:

public enum BusinessLine {

         REAL_ESTATE,FINANCE, NON_PROFIT

}

例如CustomerEO实体增加一个BusinessLine的枚举类型,代码如下所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

……

         private BusinessLine businessLine;

 

         @Enumerated(EnumType.STRING)

         public BusinessLine getBusinessLine() {

                   return businessLine;

         }

 

         public void setBusinessLine(BusinessLine businessLine) {

                   this.businessLine = businessLine;

         }

}

 

 

分享到:
评论

相关推荐

    hibernate映射枚举类型

    Hibernate通过`@Enumerated`和`@Type`注解为枚举类型提供了灵活的映射机制,允许开发者根据项目需求选择合适的方式。正确地映射枚举类型可以增强代码的可读性和可维护性,同时减少因数据类型转换导致的潜在错误。在...

    hibernate+spring注解例子

    结合`Hibernate`和`Spring`,我们可以使用`@Autowired`注解来自动装配bean,这样`Spring`会根据类型或名称自动寻找合适的依赖注入。在登录示例中,可能会有一个`UserService`类,它使用`@Autowired`注入`...

    hibernate4全注解例子

    **标题:“Hibernate4全注解例子”** 这篇文章主要讲解了如何在Java开发中使用Hibernate4框架,通过注解的方式进行数据库操作。Hibernate4是Java领域中广泛应用的对象关系映射(ORM)工具,它允许开发者使用面向...

    hibernate实体系注解

    本教程将深入探讨如何在Hibernate中使用注解来实现实体类的配置,特别是关注一对多和多对一的关系映射。 **一、Hibernate注解基础** 在Hibernate 3.2之后,引入了注解支持,使得开发者不再需要XML配置文件来定义...

    Hibernate注解 关联关系映射注解.docx

    总的来说,Hibernate的注解提供了强大的灵活性来处理不同类型的关联关系,而`mappedBy`属性是其中的关键,它帮助我们定义关联关系的维护权,使得ORM过程更加清晰和高效。正确理解和使用这些注解,可以极大地提升开发...

    ssh框架构建 hibernate注解 spring注解

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。本教程将深入探讨如何使用注解来构建SSH框架,以实现更简洁、高效的应用程序开发。 **Struts2** 是MVC设计模式的一个实现...

    基于spring+springmvc+hibernate的全注解开发

    基于Spring+SpringMVC+Hibernate的全注解开发,允许开发者摆脱传统的XML配置文件,转而使用注解来实现组件的配置,大大简化了开发流程,提高了开发效率。 **Spring框架** 是一个全面的后端应用管理框架,它提供了...

    Hibernate中映射枚举类型

    ### Hibernate中映射枚举类型 #### 概述 Hibernate是一种强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作数据库。在实际应用中,经常会遇到需要将Java中的枚举类型映射到数据库的情况。枚举类型...

    关于struts2和hibernate的部分注解解释

    ### 关于Struts2与Hibernate的部分注解解释 在现代软件开发中,特别是Java Web应用领域,Struts2、Hibernate以及Spring Data JPA等技术框架因其高效性和灵活性而备受青睐。本文将详细介绍这些框架中的一些关键注解...

    Hibernate全部注解

    ### Hibernate 全部注解详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,允许开发人员将 Java 应用程序中的对象映射到数据库表,反之亦然。使用 Hibernate 可以极大地简化数据库访问代码的...

    Hibernate 3 注解技术讲解

    除了上述注解,Hibernate 3还提供了更多的注解,如`@Temporal`(处理日期时间类型)、`@Enumerated`(枚举类型映射)、`@OrderColumn`(有序集合)等,这些注解丰富了对象与数据库之间的映射能力。 ### 5. 使用...

    hibernate注解所需包

    使用hibernate注解,必须要使用库hibernate-commons-annotations,hibernate-core,hibernate-jpa,ejb3-persistence,javassist等

    非注解Springmvc+spring+hibernate 入门实例

    在非注解方式下,你需要配置Hibernate的`hibernate.cfg.xml`文件,设置数据库连接参数,并在实体类上使用JPA的`@Entity`注解。此外,还需要创建`SessionFactory`,它是Hibernate的主要工作单元,负责创建`Session`...

    Hibernate之JPA注解

    Hibernate之JPA注解

    SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发

    在这个特定的项目中,开发者选择了SSH2的特定版本:Struts2.1.6、Spring2.5.6和Hibernate3.3,并且强调了全注解开发,这意味着在配置文件中尽可能地使用注解来代替XML配置。 首先,让我们详细了解一下这三个框架的...

    采用struts2,spring3,hibernate的全注解方式实现的demo

    总之,这个“全注解方式实现的demo”展示了如何整合Struts2、Spring3和Hibernate,利用注解简化配置,提高开发效率。对于初学者,这是一个很好的学习资源,可以深入理解这三大框架的协同工作以及注解在实际项目中的...

    ssh,struts2,spring3,hibernate3全注解例子

    在Hibernate3中,可以通过注解来定义实体类、属性映射以及关系映射。例如,`@Entity`标记一个类为数据库表,`@Table`指定对应的表名,`@Id`定义主键,`@ManyToOne`或`@OneToMany`表示一对多或多对一的关系。全注解...

    hibernate属性级别注解实例代码

    Hibernate属性级别注解是Hibernate ORM框架中用于在Java对象(实体类)的属性上定义数据库映射的关键元素。这些注解使得开发人员能够无需XML配置文件就能声明对象与数据库之间的映射关系,从而简化了开发过程。以下...

    让Hibernate同时支持xml和注解两种映射方式

    Hibernate支持两种主要的映射方式:XML映射文件和注解映射。然而,默认情况下,一个项目只能选择其中一种方式进行配置。但有时候,根据项目需求,可能需要同时使用XML和注解映射。在这种情况下,我们需要进行一些...

    Spring3+Struts2+Hibernate3 全注解集成开发

    在这个"Spring3+Struts2+Hibernate3 全注解集成开发"项目中,我们将深入探讨如何使用这三个框架的注解版本进行集成,以实现对Emp表的操作。 首先,Spring3是依赖注入(DI)和面向切面编程(AOP)的优秀框架。在全...

Global site tag (gtag.js) - Google Analytics