JSP中Hibernate映射枚举为字符串的hbm.xml实现
139 浏览量
更新于2024-08-29
收藏 54KB PDF 举报
在JSP开发中,当Java Bean对象(如`Gender`枚举类型)需要映射到数据库时,如果希望将枚举值存储为字符串格式而非默认的枚举ID,可以使用Hibernate的自定义映射以及UserType。下面详细介绍如何在`hbm.xml`配置文件中实现这一需求,并创建一个自定义的`GenderUserType`。
首先,我们需要定义Java Enum类型`Gender`,它包含未知(`UNKNOWN`)、男性(`MALE`)和女性(`FEMALE`)三个状态,并将它们的字符串表示分别赋值给相应的枚举成员:
```java
public enum Gender {
UNKNOWN("Unknown"),
MALE("Male"),
FEMALE("Female");
private String key;
private Gender(String key) {
this.key = key;
}
// 提供get方法用于查找对应的枚举实例
public static Gender getByKey(String key) {
for (Gender gender : values()) {
if (key.equalsIgnoreCase(gender.getKey())) {
return gender;
}
}
throw new NoSuchElementException("Invalid gender key: " + key);
}
}
```
接下来,为了使Hibernate能够正确处理`Gender`枚举的字符串映射,我们创建一个自定义的`GenderUserType`实现`UserType`接口:
```java
public class GenderUserType implements UserType {
private static int[] typeList = {Types.VARCHAR}; // 使用VARCHAR类型
// 返回映射字段的SQL类型
@Override
public int[] sqlTypes() {
return typeList;
}
// 返回映射的Java类
@Override
public Class returnedClass() {
return Gender.class;
}
// 声明Gender类是不可变的
@Override
public boolean isMutable() {
return false;
}
// 其他必要的UserType方法,例如deepCopy、nullSafeGet等,这里省略
// 自定义的nullSafeGet方法,根据数据库中的字符串获取对应的Gender枚举
@Override
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
String genderStr = rs.getString(names[0]);
return Gender.getByKey(genderStr);
}
// 自定义的nullSafeSet方法,将Gender枚举转换为字符串存储到数据库
@Override
public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
Gender gender = (Gender) value;
st.setString(index, gender.getKey());
}
}
```
在`hbm.xml`配置文件中,你需要为`Gender`类型的字段添加一个`user-type`元素,指定使用`GenderUserType`:
```xml
<class name="YourEntity" table="your_table_name">
<id name="id" type="long" column="id"></id>
<!-- 假设字段名为gender -->
<property name="gender" type="com.your.package.GenderUserType" column="gender_str"/>
</class>
```
通过这种方式,当在JSP或Java代码中操作`Gender`枚举时,Hibernate会自动将其转换为字符串并存储到数据库中,同时查询时也能根据字符串找到对应的枚举实例。这样就实现了Java Enum类型`Gender`在JSP中与Hibernate的映射,满足了将枚举值以字符串形式持久化的需求。
2022-01-20 上传
2008-11-12 上传
378 浏览量
250 浏览量
2009-01-05 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2024-11-25 上传
weixin_38646706
- 粉丝: 4
- 资源: 1005
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器