`

hibernate 带下标值的枚举类型的映射

 
阅读更多
1 对于普通的枚举值映射 可以使用注解@Enumerated即可

2 当要使用带有下标值的枚举类型时,可以通过注解@Type指定;不过在@Type注解中,要指定具体的类型;此类型要继承hibernate提供的UserType接口,相当于自定义一种类型。 实现UserType接口中的方法,此方法可以帮助hibernate在保存对象属性为枚举时,把枚举值转换成对应的值持久化到数据库。并且在查询对象属性为枚举值,如何把数据库中的值展现成枚举值。

3 提供代码例子
枚举类
public enum UserType {

/**
* 管理员
*/
Admin(1),

/**
* 普通用户
*/
CommonUser(2);

UserType(int value) {
this.value = value;
}

private int value;

public int getValue() {
return value;
}

public static UserType valueOf(int value) {
for (UserType userType : UserType.values()) {
if (userType.getValue() == value) {
return userType;
}
}
throw new OperateFailException("枚举类不支持数字:" + value);
}

public static UserType nameOf(String name) {
for (UserType userType : UserType.values()) {
if (userType.toString().equals(name)) {
return userType;
}
}
throw new OperateFailException("枚举类不支持字面值:" + name);
}
}

抽象类继承UserType接口
public abstract class IntegerEumuUserType<T extends Enum<T>> implements
UserType, Serializable {

/**
*
*/
private static final long serialVersionUID = -1413528409533536144L;

private static int[] TYPES = new int[]{Types.INTEGER};

Class<T> clazz = null;

@SuppressWarnings(value="unchecked")
IntegerEumuUserType() {
clazz = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

public Object assemble(Serializable arg0, Object arg1)
throws HibernateException {
return arg0;
}

public Object deepCopy(Object x) throws HibernateException {
return x;
}

public Serializable disassemble(Object arg0) throws HibernateException {
return (Serializable)arg0;
}

public boolean equals(Object x, Object y) throws HibernateException {
if (x == y) {
return true;
} else {
x = (Integer)x;
y = (Integer)y;
if (x.toString().equals(y.toString())) {
return true;
}
}
return false;
}

public int hashCode(Object arg0) throws HibernateException {
return arg0.hashCode();
}

public boolean isMutable() {
return false;
}

public Object nullSafeGet(ResultSet rs, String[] names, Object value)
throws HibernateException, SQLException {
T t = null;
int index = rs.getInt(names[0]);
if (rs.wasNull()) {
t = this.indexOf(index);
}
return t;
}

@SuppressWarnings(value="unchecked")
public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index)
throws HibernateException, SQLException {
if (value == null) {
preparedStatement.setNull(index, Types.INTEGER);
} else {
preparedStatement.setInt(index, this.index((T)value));
}
}

public Object replace(Object original, Object target, Object owner)
throws HibernateException {
return original;
}

public Class<Integer> returnedClass() {
return Integer.class;
}

public int[] sqlTypes() {
return TYPES;
}

public abstract int index(T t);

public abstract T indexOf(int index);

}

当使用具体的枚举类型,只需要创建对应的type即可
public class UserTypeUserType extends IntegerEumuUserType<UserType> {

/**
*
*/
private static final long serialVersionUID = 8763306981292415942L;

@Override
public int index(UserType t) {
return t.getValue();
}

@Override
public UserType indexOf(int index) {
return UserType.valueOf(index);
}

}
分享到:
评论

相关推荐

    FANUC机器人如何在自动运行中修改程序中的参数值和坐标值?.docx

    虽然通常建议在启动自动运行前完成所有设定,但在某些情况下,实时调整是必要的。本文将详细介绍如何在FANUC机器人自动运行中安全地修改程序中的参数值和坐标值。 首先,确保机器人在安全状态下进行修改,避免因不...

    动态显示鼠标坐标值(VB6.0代码)

    在VB6.0(Visual Basic 6.0)编程环境中,动态显示鼠标坐标值是一项基本但实用的功能,常用于调试或者开发需要精确控制鼠标位置的应用。这个功能可以通过编写一段简单的代码来实现,允许用户在移动鼠标时看到当前...

    xy.rar_坐标值

    "xy.rar_坐标值"这个标题暗示了一个压缩包文件,其中可能包含了一个程序或者数据集,用于动态获取X和Y坐标。这种功能常见于图形处理、游戏开发、地图应用或任何需要定位的系统中。 动态获取坐标值意味着该系统或者...

    读取xml文件指定下标值循环展示

    读取xml文件指定标示值,排序展示, XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("XMLTemplate.xml"));

    动态显示鼠标坐标值(VB6.0源代码)

    在VB6.0编程环境中,动态显示鼠标坐标值是一项基础但实用的技术,它涉及到Windows API函数的调用、事件处理以及用户界面的实时更新。这个项目"动态显示鼠标坐标值(VB6.0源代码)"提供了实现这一功能的源代码,帮助...

    读取鼠标位置坐标值(C#代码编写)

    以下是一个简单的示例,展示如何创建一个Windows Forms应用,监听鼠标的移动并显示坐标值: ```csharp using System; using System.Windows.Forms; public class MousePositionExample : Form { public ...

    获取坐标值

    首先,我们需要了解在A53开发板上获取坐标值通常涉及到的传感器类型。常见的有加速度计、陀螺仪和磁力计,这些传感器可以组合成一个惯性测量单元(IMU),用于监测设备的三维运动和方向。加速度计提供线性加速度数据,...

    matlab取坐标值函数ginput

    3. **获取并打印坐标值**:在`ButttonDownFcn`函数内部,通过`get(gca,'CurrentPoint')`获取当前光标的位置,并将其横纵坐标分别存储在变量`x`和`y`中,最后打印这两个坐标值。 #### 三、扩展应用 除了上述基本...

    python实时抓取鼠标坐标值

    python实时抓取鼠标坐标值

    快捷的获取鼠标坐标值

    在这个特定的案例中,我们关注的是如何在LabVIEW中快速获取鼠标坐标值。标题“快捷的获取鼠标坐标值”指的是在LabVIEW环境中实现的一种功能,它允许用户实时地获取鼠标在界面上的位置信息。 描述中提到,这个功能是...

    VC实时显示鼠标坐标值

    6. **多线程编程**:虽然在大多数情况下,这个功能不需要多线程,但在某些复杂的应用场景下,如果鼠标坐标更新和界面渲染在不同线程中执行,可以提高性能并避免阻塞用户界面。 7. **资源管理**:在程序退出或最小化...

    取鼠标坐标值

    在计算机编程领域,获取鼠标坐标值是一项基础但重要的任务,特别是在开发交互式应用程序时。鼠标坐标通常指的是鼠标的当前位置相对于屏幕或某个特定窗口的水平和垂直距离。在本文中,我们将深入探讨如何在不同的编程...

    CVI图像的放大缩小及光标值

    开发者可能已经实现了对图像数据的读取、处理、显示,以及用户交互功能,比如通过鼠标操作改变图像的放大倍数,以及获取并显示光标下的像素值。 实现这些功能时,需要注意以下几点: 1. 图像的内存管理:加载大图像...

    画曲线自动调整纵横坐标值

    类的设计可能包括设置数据点、计算坐标映射、实际绘制等步骤。 3. **自动调整坐标轴**: - 这个功能意味着程序能根据数据范围自动设定横轴(X轴)和纵轴(Y轴)的刻度。这通常涉及数据处理,找到最小值和最大值,...

    matlab编程中,动态显示鼠标坐标值的小程序

    matlab编程中,动态显示鼠标坐标值的小程序

    C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法

    总之,C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法,是通过数学运算结合C#的编程语法来完成的。它涉及到坐标平移、角度计算、向量旋转等概念,这些知识对于理解计算机图形学和游戏开发中的几何变换至关...

    QCustomPlot鼠标跟随显示坐标值

    这样,每当鼠标在图表上移动时,`QCPItemTracer`就会显示鼠标下的坐标值。如果还需要显示具体的数值,可以自定义一个`QLabel`或者使用`QCPLabel`类,动态更新其文本内容来显示当前坐标点对应的数值。 `QCustomPlot`...

    GUI实时点击获取坐标值

    在MATLAB环境中,GUI(图形用户界面)是一种交互式编程方式,它允许用户通过图形界面与程序进行交互。...这个功能在图像处理、数据分析或者任何需要定位特定点的应用中非常有用。 首先,我们来分析一下给定的文件: ...

    MATLAB截取图像中的某个区域,同时保存对应的坐标值.docx

    该函数的语法为 `imshow(X,cmap)`,其中 `X` 是图像数据,`cmap` 是颜色映射文件。例如:`imshow(pic);` 显示读取的图像。 图像交互 在图像处理中,我们经常需要与图像进行交互,例如选择图像中的某个区域。MATLAB ...

    54、80坐标及3度带6度带换算

    六度带转三度带步骤: 1.选择北京五四参考椭球 2.选择高斯坐标反算 3.输入六度带高斯坐标值(如X:3603218,Y:18673203) 4.选择六度带投影 ...7.选择三度带邻带换算(即显示三度带坐标值X:3602308,Y:36391374)

Global site tag (gtag.js) - Google Analytics