实体类的规范

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);
    }
}

你可能感兴趣的:(实体类的规范)