Hibernate:UserType - nullSafeSet - 列长度

时间:2012-02-15 12:20:10

标签: hibernate usertype

我正在定义我自己的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)));
}

有人可以帮助我吗? 我对任何想法持开放态度......

非常感谢,

罗布

2 个答案:

答案 0 :(得分:2)

使用inPreparedStatement.getParameterMetaData().getPrecision(i)作为列长,将解决您的问题。

答案 1 :(得分:0)

usertype有一个属性sqltype,它返回一个指定长度的sql字符串类型。对于非字符串类型(包括usertypes

),将忽略AFAIK @Column(length=100