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”正在写入数据库。
我在做什么明显错误吗?