package auction.model;

来源:互联网 发布:淘宝库存同步软件 编辑:程序博客网 时间:2024/06/07 04:53

  映射枚举枚举类型是一个常见的Java惯用语,其中类有着(小)数量不变的不可变实例。

  1、在JDK5.0中使用枚举如果使用JDK5.0,可以给类型安全的枚举使用内建的语言支持。例如,Rating类看起来如下:

  package auction.model;

  public enum Rating{

  EXCELLENT, OK, BAD

  }

  Comment类有这个类型的一个属性:

  public class Comment{

  …

  private Rating rating;

  private Item auction;

  …

  }

  2、编写定制的枚举处理程序现在要介绍的不是最基础的UserType接口,而是EnhanceUserType接口。

  public class StringEnumUserType implements EnhancedUserType, ParameterizedType {

  private Class enumClass;

  public void setParameterValues(Properties parameters) {

  String enumClassName = parameters.getProperty("enumClassName");

  try {

  enumClass = ReflectHelper.classForName(enumClassName);

  } catch (ClassNotFoundException e) {

  throw new HibernateException("Enum class not found", e);

  }

  }

  // //映射Java值类型

  public Class returnedClass() {

  return enumClass;

  }

  // 告诉Hibernate要使用什么SQL列类型生成DDL模式

  public int[] sqlTypes() {

  return new int[] { StringType.INSTANCE.sqlType() };

  }

  // 这个类型是否可变

  public boolean isMutable() {

  return false;

  }

  // 创建值的快照

  public Object deepCopy(Object value) throws HibernateException {

  return value;

  }

  // 以序列化的形保存信息的数据的高速缓存

  public Serializable disassemble(Object value) throws HibernateException {

  return (Serializable) value;

  }

  // 高速缓存的数据转变为MonetaryAmount的一个实例

  public Object assemble(Serializable cached, Object owner)

  throws HibernateException {

  return cached;

  }

  // 处理脱管对象状态的合并

  public Object replace(Object original, Object target, Object owner)

  throws HibernateException {

  return original;

  }

  public boolean equals(Object x, Object y) throws HibernateException {

  if (x == y)

  return true;

  if (null == x || null == y)

  return false;

  return x.equals(y);

  }

  public int hashCode(Object x) throws HibernateException {

  return x.hashCode();

  }

  public Object fromXMLString(String xmlValue) {

  return Enum.valueOf(enumClass, xmlValue);

  }

  public String objectToSQLString(Object value) {

  return '\'' + ((Enum) value)。name() + '\'';

  }

  public String toXMLString(Object value) {

  return ((Enum) value)。name();

  }

  public Object nullSafeGet(ResultSet rs, String[] names, Object owner)

  throws HibernateException, SQLException {

  String name = rs.getString(names[0]);

  return rs.wasNull() ? null : Enum.valueOf(enumClass, name);

  }

  public void nullSafeSet(PreparedStatement st, Object value, int index)

  throws HibernateException, SQLException {

  if (null == value) {

  st.setNull(index, StringType.INSTANCE.sqlType());

  } else {

  st.setString(index, ((Enum) value)。name());

  }

  }

  }

0 0
原创粉丝点击