读书人

hibernate自定义枚举部类

发布时间: 2012-09-21 15:47:26 作者: rapoo

hibernate自定义枚举类型

1. 性别枚举类型类:Gender.java

?

  1. package?com.qiujy.common.myusertype;
  2. import?java.io.Serializable;
  3. /**?*?性别枚举类型
  4. ?*??*?@author?qiujy
  5. ?*/
  6. public?enum?Gender?implements?Serializable?{????Male("男",?0),?Female("女",?1),?Other("保密",?2);
  7. ????private?String?name;
  8. ????private?int?value;
  9. ????public?String?getName()?{????????return?name;
  10. ????}
  11. ????public?int?getValue()?{????????return?value;
  12. ????}
  13. ????private?Gender(String?name,?int?value)?{????????this.name?=?name;
  14. ????????this.value?=?value;????}
  15. ????public?static?Gender?getGender(int?value)?{
  16. ????????if?(0?==?value){????????????return?Male;
  17. ????????}else?if?(1?==?value){????????????return?Female;
  18. ????????}else{????????????return?Other;
  19. ????????}????}
  20. ????@Override????public?String?toString(){
  21. ????????return?this.name;????}
  22. }

2.自定义枚举映射类型类:GenderType.java

?

    /**
  1. ?*?Filename:?ExportDBScript.java?*?Author:?qiujy
  2. ?*?Createtime:Nov?22,?2008?*?Copyrights?2008?qjyong?All?rights?reserved.
  3. ?*?EMail:?qjyong@gmail.com?*/
  4. package?com.qiujy.common.myusertype;
  5. import?java.io.Serializable;import?java.sql.PreparedStatement;
  6. import?java.sql.ResultSet;import?java.sql.SQLException;
  7. import?org.hibernate.Hibernate;
  8. import?org.hibernate.HibernateException;import?org.hibernate.usertype.UserType;
  9. /**
  10. ?*?自定义hibernate的性别枚举映射类型?*?
  11. ?*?@author?qiujy?*/
  12. public?class?GenderType?implements?UserType?{
  13. ????/**?告诉Hibernate要使用什么SQL列类型生成DDL?*/????public?int[]?sqlTypes()?{
  14. ????????return?new?int[]{Hibernate.SHORT.sqlType()};????}
  15. ????????/**?告诉Hibernate这个UserType用来映射的数据类型。这里是Gender类?*/
  16. ????@SuppressWarnings("unchecked")????public?Class?returnedClass()?{
  17. ????????return?Gender.class;????}
  18. ????????/**?告诉hibernate这个类型是不可变的。有微小的性能优化????*/
  19. ????public?boolean?isMutable()?{????????return?false;
  20. ????}????
  21. ????/**这是用于Hibernate缓存生成的快照,由于Gender是不可变的,直接返回就好了。*/????public?Object?deepCopy(Object?arg0)?throws?HibernateException?{
  22. ????????return?arg0;????}
  23. ????????/**?hibernate把这个数据放入二级缓存时要调用的方法??*/
  24. ????public?Serializable?disassemble(Object?arg0)?throws?HibernateException?{????????return?(Serializable)arg0;
  25. ????}????
  26. ????/**?从二级缓存中取这个对象数据时要调用的方法?*/????public?Object?assemble(Serializable?arg0,?Object?arg1)
  27. ????????????throws?HibernateException?{????????return?arg0;
  28. ????}????
  29. ????/**?处理脱管对象状态的合并。*/????public?Object?replace(Object?original,?Object?target,?Object?owner)
  30. ????????????throws?HibernateException?{????????return?original;
  31. ????}????
  32. ????public?boolean?equals(Object?x,?Object?y)?throws?HibernateException?{????????return?x?==?y;
  33. ????}
  34. ????public?int?hashCode(Object?o)?throws?HibernateException?{????????return?o.hashCode();
  35. ????}????
  36. ????/**?从JDBC的ResultSet读取属性值。这个方法是在从数据库查询数据时用到。?*/????public?Object?nullSafeGet(ResultSet?rs,?String[]?names,?Object?owner)
  37. ????????????throws?HibernateException,?SQLException?{????????int?value?=?rs.getInt(names[0]);
  38. ????????return?Gender.getGender(value);????}
  39. ????/**?将属性的值设置到PreparedStatement。?*/
  40. ????public?void?nullSafeSet(PreparedStatement?ps,?Object?value,?int?index)????????????throws?HibernateException,?SQLException?{
  41. ????????if?(value?==?null)?{????????????ps.setInt(index,?Hibernate.SHORT.sqlType());
  42. ????????}?else?{????????????ps.setInt(index,?((Gender)?value).getValue());
  43. ????????}????}
  44. }

3.在映射文件中使用:

    <?xml?version="1.0"?encoding="UTF-8"?>
  1. <!DOCTYPE?hibernate-mapping?PUBLIC????????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
  2. ????????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
  3. ????<class?name="com.qiujy.domain.Account"?table="account">????????<id?name="id"?column="id">
  4. ????????<generator?class="native"/>????</id>
  5. ?????<property?name="loginname"?column="login_name"/>?????<property?name="pwd"/>
  6. ?????<property?name="gender"?type="com.qiujy.common.myusertype.GenderType"/>?????<property?name="registedTime"?type="timestamp"?column="registed_time"/>
  7. ????</class></hibernate-mapping>

读书人网 >软件架构设计

热点推荐