注册Hibernate TypeDef时出错



我有一个系统,一些长期离职的程序员决定,当用户被锁定时,account_locked值应该是"p"而不是"Y"。"N"仍然相当于一个假值。当然,由于它是一个生产系统,我不能将它修改为使用标准的"Y"。

因此,我借用了标准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似乎被忽略了。(实际上,我仍然看到"Y"被写入数据库,尽管我们删除了Hibernate YesNoType)。

我是不是做错了什么?

刚刚在做类似的事情时发现了这个线程。在我的场景中,我还更改了将一些参数传递给BooleanTypeDescriptor:的构造函数

private static final char CHARACTER_VALUE_TRUE = 'J';
private static final char CHARACTER_VALUE_FALSE = 'N';
public JaNeinType() {
    super(CharTypeDescriptor.INSTANCE, new BooleanTypeDescriptor(CHARACTER_VALUE_TRUE, CHARACTER_VALUE_FALSE));
}

最新更新