我定义了一个包含枚举类型的类,并在枚举类型中添加了 fromInt 静态方法和 value 方法,然后在定义数据表的时候把枚举字段设置为int类型。枚举类型、类定义如下:
public enum UserAction {
/** 未知动作,用于旧代码兼容新新行为使用 */
UNKNOWN("未知动作", 0),
VIEW("查看", 100),
COLLECT("收藏", 200),
DELIVER("投递", 300);
private static final Map<Integer, UserAction> USER_ACTION_MAP = new HashMap<>();
static {
for (UserAction userAction : values()) {
USER_ACTION_MAP.put(userAction.value(), userAction);
}
}
/** 用户行为描述 */
private String desc;
/** 用户行为编码以及优先级 */
private int priority;
UserAction(String desc, int priority) {
this.desc = desc;
this.priority = priority;
}
/**
* 根据用户行为编码,获取用户行为
* <p />
* 为了兼容Nutz dao枚举类型转换,该方法必须命名为fromInt
*
* @param priority 编码
* @return 用户行为
*/
public static UserAction fromInt(int priority) {
return USER_ACTION_MAP.getOrDefault(priority, UNKNOWN);
}
public String getDesc() {
return desc;
}
/**
* 获取用户行为编码
* <p />
* 为了兼容Nutz dao枚举类型转换,该方法必须命名为value
*
* @return 用户行为编码
*/
public int value() {
return priority;
}
}
@Table("JobViewer")
public class JobViewer {
/** 数据库主键 */
@Id
private long id;
/** 职位编号 */
@Column
private String jobNumber = "";
/** 用户ID */
@Column
private long userId;
/** 用户行为,即用户进入该表的原因 */
@Column
@ColDefine(type = ColType.INT)
private UserAction userAction = UserAction.VIEW;
/** 日志添加的时间 */
@Column
private Date addTime = new Date();
/** 用户分值更新的时间 */
@Column
private Date updateTime = new Date();
public JobViewer() {
}
public JobViewer(String jobNumber, long userId, UserAction userAction) {
this.jobNumber = jobNumber;
this.userId = userId;
this.userAction = userAction;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getJobNumber() {
return jobNumber;
}
public void setJobNumber(String jobNumber) {
this.jobNumber = jobNumber;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public UserAction getUserAction() {
return userAction;
}
public void setUserAction(UserAction userAction) {
// 由于该字段是后添加的,默认值为null,为了避免出现null值,这里使用了一个trick
if (null == userAction) {
userAction = UserAction.VIEW;
}
this.userAction = userAction;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
当我更新数据库数据时,userAction字段可以正确转int值(如100);
当我插入数据库数据时,userAction字段不能正确转换为int值,而是转换为枚举值序号(如1);
另外,在设置Condition和Chain中的userAction值时,也不能正确转换为int值,会变为枚举值序号;
nutz:1.r.62
java version "1.8.0_112"