1. 性别枚举类型类:Gender.java
- package com.qiujy.common.myusertype;
- import java.io.Serializable;
-
- public enum Gender implements Serializable {
-
Male("男", 0), Female("女", 1), Other("保密", 2);
-
private String name;
-
private int value;
-
public String getName() {
-
return name;
- }
-
public int getValue() {
-
return value;
- }
-
private Gender(String name, int value) {
-
this.name = name;
-
this.value = value;
- }
-
public static Gender getGender(int value) {
-
if (0 == value){
-
return Male;
-
}else if (1 == value){
-
return Female;
-
}else{
-
return Other;
- }
- }
-
@Override
-
public String toString(){
-
return this.name;
- }
- }
2.自定义枚举映射类型类:GenderType.java
-
- package com.qiujy.common.myusertype;
- import java.io.Serializable;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.hibernate.Hibernate;
- import org.hibernate.HibernateException;
- import org.hibernate.usertype.UserType;
-
- public class GenderType implements UserType {
-
-
public int[] sqlTypes() {
-
return new int[]{Hibernate.SHORT.sqlType()};
- }
-
-
-
@SuppressWarnings("unchecked")
-
public Class returnedClass() {
-
return Gender.class;
- }
-
-
-
public boolean isMutable() {
-
return false;
- }
-
-
-
public Object deepCopy(Object arg0) throws HibernateException {
-
return arg0;
- }
-
-
-
public Serializable disassemble(Object arg0) throws HibernateException {
-
return (Serializable)arg0;
- }
-
-
-
public Object assemble(Serializable arg0, Object arg1)
-
throws HibernateException {
-
return arg0;
- }
-
-
-
public Object replace(Object original, Object target, Object owner)
-
throws HibernateException {
-
return original;
- }
-
-
public boolean equals(Object x, Object y) throws HibernateException {
-
return x == y;
- }
-
public int hashCode(Object o) throws HibernateException {
-
return o.hashCode();
- }
-
-
-
public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
-
throws HibernateException, SQLException {
-
int value = rs.getInt(names[0]);
-
return Gender.getGender(value);
- }
-
-
public void nullSafeSet(PreparedStatement ps, Object value, int index)
-
throws HibernateException, SQLException {
-
if (value == null) {
- ps.setInt(index, Hibernate.SHORT.sqlType());
-
} else {
- ps.setInt(index, ((Gender) value).getValue());
- }
- }
- }
3.在映射文件中使用:
-
<?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
-
<class name="com.qiujy.domain.Account" table="account">
-
<id name="id" column="id">
-
<generator class="native"/>
-
</id>
-
<property name="loginname" column="login_name"/>
-
<property name="pwd"/>
-
<property name="gender" type="com.qiujy.common.myusertype.GenderType"/>
-
<property name="registedTime" type="timestamp" column="registed_time"/>
-
</class>
- </hibernate-mapping>
-
分享到:
相关推荐
### Hibernate枚举映射方式 #### 1. `@Enumerated` 注解 Hibernate通过`@Enumerated`注解来处理枚举映射。这个注解有两个可选的枚举值:`EnumType.ORDINAL`和`EnumType.STRING`。 - `EnumType.ORDINAL`:默认方式...
#### 自定义枚举映射 有时候,我们可能希望使用自定义的值(比如一个特定的字符串或者整数)作为枚举的区分标识,而不是使用默认的`name`或`ordinal`。这时候,就需要实现一个自定义的枚举映射器了。 ##### 自定义...
3. **使用注解进行映射**: 对于使用注解的映射,可以直接在枚举类型的属性上指定`@Enumerated`: ```java @Entity public class MyEntity { @Enumerated(EnumType.ORDINAL) private MyEnum myEnum; } ``` ...
- **任意类型映射**:将任意类型映射到数据库字段。 #### 五、SQL标识符引用 - Hibernate支持使用SQL中的引号来标识表名、列名等,以避免关键字冲突等问题。 #### 六、模块化映射文件 - 大型项目通常会将映射...
- **任意类型映射**:映射任意类型的字段。 **5.3 SQL 引用标识符** - **引用标识符**:处理数据库中的特殊标识符。 **5.4 模块化映射文件** - **拆分映射文件**:将大型映射文件拆分为多个小文件以提高可读性...
- **持久化枚举(Persistent enum)类型**:枚举类型的映射策略。 - **自定义值类型**:用户定义的复杂数据类型的映射。 - **映射到"任意"(any)类型**:一种特殊的数据类型映射方式,用于存储任意类型的对象。 -...
`@Type`注解可以自定义属性的存储类型,如日期、枚举等复杂类型的转换。 **十、查询语言HQL** Hibernate提供了一种面向对象的查询语言——Hibernate Query Language(HQL),与SQL类似但更接近Java对象,支持复杂...
本文将详细介绍如何在Hibernate中实现枚举类型到数据库的映射,包括对应的枚举类的定义、自定义UserType以及在映射文件hbm.xml中的配置。 首先,定义一个枚举类型Gender,它包含了性别相关的几个枚举值,分别是...
- **Hibernate自定义数据类型**:解释了如何自定义Hibernate的数据类型以适应特定的应用需求。 - **Hibernate类型**:概述了Hibernate提供的各种内置数据类型及其用途。 以上是马士兵Java框架Hibernate学习笔记的...
Hibernate支持自定义类型转换,通过`@Type`注解可以指定自定义类型,如日期时间格式、枚举等。 8. **回调事件** `@PrePersist`、`@PostPersist`、`@PreUpdate`、`@PostUpdate`、`@PreRemove`和`@PostRemove`等...
- **任意类型映射**:使用 `any` 元素映射任意类型的属性。 ##### 5.3 SQL 引用标识符 - **SQL 标识符**:支持使用 SQL 标准引用标识符。 ##### 5.4 模块化映射文件 - **拆分映射文件**:可以将映射信息拆分成多个...
3. **对象关系映射(ORM)** Hibernate的核心在于ORM,它通过`@Entity`注解标识Java类为实体,`@Table`定义对应数据库表,`@Id`指定主键。`Session`接口是ORM的主要操作接口,提供了增删改查等基本操作。 4. **...
自定义字段类型映射 对于JPA不直接支持的数据类型,可以通过实现`UserType`接口来自定义字段类型。这种方式比较复杂,但能实现对任何类型的数据的持久化。 ### 5. JPA实体配置 实体类需要使用`@Entity`注解标识...
12. **类型转换(Type Converters)**:自定义类型转换器可以处理非标准Java类型,如日期时间格式、自定义枚举等。 13. ** Criteria API**:提供一种面向对象的查询方式,与HQL类似,但更易于在代码中动态构建。 ...
在持久化枚举到数据库时,通常将枚举的`ordinal()`值或自定义的code映射到数据库字段,以避免枚举值更改导致的数据不一致。例如,我们可以在数据库表中创建一个`order_status_code`字段,并在实体类中定义: ```...
在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的组成部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本篇文章将深入探讨如何在Hibernate中映射树形结构,这是一种处理复杂数据...