我正在定义自己的名为FixedString的UserType,并且在nullSafeSet方法中,我想用空格填充(rightPad)所有字符串(最大长度为注释定义的列的长度:
@Column(length=100,nullable=true))。
我可以(用StringUtils.trim方法)修剪nullSafeGet方法中的所有字符串:
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)));
}有没有人能帮我一下?我对任何想法都持开放态度。
非常感谢,
抢夺
发布于 2012-03-02 03:51:40
使用inPreparedStatement.getParameterMetaData().getPrecision(i)作为列长度,将解决您的问题。
发布于 2012-02-15 21:21:03
usertype有一个属性sqltype,它返回指定长度的sql字符串类型。对于包括用户类型在内的非字符串类型,将忽略AFAIK @Column(length=100
https://stackoverflow.com/questions/9293257
复制相似问题