Hibernate: UserType — nullSafeSet — длина столбца

Я определяю свой собственный UserType, называемый FixedString, и в методе nullSafeSet я хотел бы заполнить (rightPad) все строки пробелами (до длины этого столбца, определенного с помощью аннотации:

@Столбец (длина = 100, nullable = истина)).

У меня нет проблем с обрезкой всех строк в методе 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)));
}

Может ли кто-нибудь помочь мне с этим, пожалуйста? Я открыт для любых идей...

Большое спасибо,

Роб


person Rob    schedule 15.02.2012    source источник


Ответы (2)


Используя inPreparedStatement.getParameterMetaData().getPrecision(i) в качестве длина столбца, решит вашу проблему.

person Maarten    schedule 01.03.2012

тип пользователя имеет свойство sqltype, которое возвращает тип строки sql с указанной длиной. AFAIK @Column(length=100 игнорируется для нестроковых типов, включая пользовательские типы

person Firo    schedule 15.02.2012
comment
Итак,... Означает ли это, что я не могу получить длину определенного столбца (например, телефона) в UserType (в моем случае это FixedString)? @Column(length=100, nullable=true) @Type(type=com.persistence.FixedString) private String phone; - person Rob; 15.02.2012
comment
тип пользователя должен указывать тип и длину столбца. поэтому аннотация неактуальна - person Firo; 16.02.2012
comment
СПАСИБО Фиро. Наконец, я решил установить длину столбца в качестве параметра для UserType, поэтому я могу динамически обрезать строки в соответствии с индивидуальной длиной столбцов + я сохраняю @Column (длина = 100) для правильной длины столбца путем создания БД (из HN). - person Rob; 16.02.2012