用Hibernate映射INT字段到EnumSet
上次提到了把数据库的INT字段映射到Java里的Enum,但这样的字段只表示保存一个值。以前用C时经常会写这样的代码:
/* * Encode the EnumSet into an integer based on bit on/off */private int encode(EnumSet<T> set) { int ret = 0; for (T val : set) { ret |= 1 << val.getCode(); } return ret;}/* * Decode the integer back to a EnumSet based on bit on/off */private EnumSet<T> decode(int code) {Map<Integer, T> codeMap = new HashMap<Integer, T>();for (T val : EnumSet.allOf(enumClass)) {codeMap.put(val.getCode(), val);} EnumSet<T> result = EnumSet.noneOf(enumClass); while (code != 0) { int ordinal = Integer.numberOfTrailingZeros(code); code ^= Integer.lowestOneBit(code); result.add(codeMap.get(ordinal)); } return result;}