我正在定义我自己的UserType,名为FixedString,在nullSafeSet方法中,我想用空格填充(rightPad)所有字符串(最多用注释定义的列的长度:
@Column(length = 100,nullable = true))。
我在nullSafeGet方法中修剪所有字符串没有问题(使用StringUtils.trim方法):
public Object nullSafeGet(ResultSet inResultSet, String[] names, Object o) throws SQLException {
String val = (String)Hibernate.STRING.nullSafeGet(inResultSet, names[0]);
return StringUtils.trim(val);
}
但我不知道如何获取当前列的长度(在我的情况下为COLUMN_LENGTH),所以我可以用空格填充该字符串(最多为预定义的列长度)
public void nullSafeSet(PreparedStatement inPreparedStatement, Object o, int i) throws SQLException {
String val = (String)o;
inPreparedStatement.setString(i, StringUtils.rightPad(val, COLUMN_LENGTH)));
}
有人可以帮助我吗? 我对任何想法持开放态度......
非常感谢,
罗布
答案 0 :(得分:2)
使用inPreparedStatement.getParameterMetaData().getPrecision(i)
作为列长,将解决您的问题。
答案 1 :(得分:0)
usertype有一个属性sqltype,它返回一个指定长度的sql字符串类型。对于非字符串类型(包括usertypes
),将忽略AFAIK@Column(length=100