1.Boolean类型
1.1.使用Boolean类型,而不是Byte类型
1.2.数据库字段名使用is_开头
1.3.实体类字段名不使用is开头
例子
/**
* 是否为新消息
*/
@Column(name = “is_new_message”, nullable = false)
private Boolean newMessage;
2.Enum类型
1.使用Convert注解, 并指定coverter类
例子
/**
* 询盘类型
*/
@Column(name = “type”, nullable = false)
@Convert(converter = Type.Convert.class)
private Type type;
2.枚举类型的规范
2.1. 枚举类需要实现EntityEnum接口
2.2. 在枚举类内部定义转换类, 并实现EntityEnumConverter抽象类
例子
public enum Type implements EntityEnum {
/**
* FRQ询盘
*/
RFQ(1),
/**
* 询盘
*/
PRODUCT_INQUIRY(2),
/**
* 私人展会询盘
*/
PRIVATE_PRODUCT_INQUIRY(3),
/**
* 供应商询盘
*/
SUPPLIER_INQUIRY(4);
private Integer code;
Type(Integer code) {
this.code = code;
}
public Integer getCode() {
return this.code;
}
@Converter
public static class Convert extends EntityEnumConverter {
}
附录
枚举字段接口
/**
* 实体类的枚举字段都需要实现该接口
* @author Jianhua Ying
*/
public interface EntityEnum {
Integer getCode();
}
枚举字段转换器抽象类
import javax.persistence.AttributeConverter;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
/**
* 实体类的枚举字段的转换器基类
*
* @param 枚举字段的类
*/
public abstract class EntityEnumConverter implements AttributeConverter {
private Class xclazz;
private Method valuesMethod;
@SuppressWarnings(“unchecked”)
public EntityEnumConverter() {
this.xclazz = (Class) (((ParameterizedType) this.getClass().getGenericSuperclass())
.getActualTypeArguments())[0];
try {
valuesMethod = xclazz.getMethod(“values”);
} catch (Exception e) {
throw new RuntimeException(“can’t get values method from ” + xclazz);
}
}
@Override
public Integer convertToDatabaseColumn(EntityEnum attribute) {
return attribute == null ? null : attribute.getCode();
}
@SuppressWarnings(“unchecked”)
@Override
public X convertToEntityAttribute(Integer dbData) {
try {
X[] values = (X[]) valuesMethod.invoke(null);
for (X x : values) {
if (x.getCode().equals(dbData)) {
return x;
}
}
} catch (Exception e) {
throw new RuntimeException(“can’t convertToEntityAttribute” + e.getMessage());
}
throw new RuntimeException(“unknown dbData ” + dbData);
}
}