0
我有一個系統,一些長期離開的編碼器決定,當用戶被鎖定時,account_locked值應該是「P」而不是「Y」。 「N」仍然等於假值。當然,因爲它是一個生產系統,所以我不能修改它來使用標準的「Y」。錯誤註冊休眠TypeDef
所以,我從標準的Hibernate YesNoType借來的代碼,並修改它,如下所示:
public class PasswordLockType extends AbstractSingleColumnStandardBasicType<Boolean>
implements PrimitiveType<Boolean>, DiscriminatorType<Boolean> {
private static final long serialVersionUID = 1L;
public static final PasswordLockType INSTANCE = new PasswordLockType();
public PasswordLockType() {
super(CharTypeDescriptor.INSTANCE, BooleanTypeDescriptor.INSTANCE);
}
public String getName() {
return "passwordLock";
}
public Class getPrimitiveClass() {
return boolean.class;
}
public Boolean stringToObject(String xml) throws Exception {
return fromString(xml);
}
public Serializable getDefaultValue() {
return Boolean.FALSE;
}
@SuppressWarnings({ "UnnecessaryUnboxing" })
public String objectToSQLString(Boolean value, Dialect dialect) throws Exception {
return StringType.INSTANCE.objectToSQLString(value.booleanValue() ? "P" : "N", dialect);
}
}
然後我修改了ApplicationUser類,如下所示:
@Entity
@TypeDefs(
@TypeDef(name="passwordLock", typeClass=PasswordLockType.class)
)
public class ApplicationUser implements UserDetails, Comparable<ApplicationUser>, Serializable {
// other fields
private Boolean accountLocked;
@Column(name = "LOCK_CD")
@Type(type="passwordLock")
public Boolean getAccountLocked() {
return accountLocked;
}
不幸的是,typedef的似乎被忽略。 (實際上,即使我們刪除了Hibernate YesNoType,我仍然看到「Y」正在寫入數據庫。
我在做什麼明顯錯誤嗎?