2012-05-10 3 views
0

У меня есть ClobType, который расширяет пользовательский тип Hibernate и делает то, что вы ожидаете: преобразует клаб, найденный в базе данных, в String. Я сопоставил столбцы clob с ClobType, и эти столбцы прекрасно отображались при доступе к ним на моих страницах JSP.Hibernate: Как установить значение пользовательского UserType

Но теперь, когда я пытаюсь установить значение, я в тупике. Потому что я могу написать ${myObject.longField} в моих страницах JSP говорит мне, что я, вероятно, могу сказать

String s = myObject.getLongField().toString(); 

и получить строку, несмотря на то, что Longfield имеет типа ClobType.

Что я не знаю, как использовать сеттер. Я могу легко создать экземпляр ClobType, но как я могу передать ему строковые данные, которые нужно сохранить в виде капли?

ClobType clobType = new ClobType(); 
String s = "... a really REALLY long string ..."; 
/* a miracle occurs */ 
myObject.setLongField(clobType); 
myObjectDAO.saveOrUpdate(myObject); 

Какое чудо мне нужно, чтобы дать ClobType значение строки?

Или есть лучший (или более правильный) способ, когда мои два сеттера возвращают строки, а не ClobTypes? Есть ли специальное отображение, которое это делает? В моей бизнес-логике нет необходимости знать, что данный столбец реализован как blob.

ответ

1

Я думаю, что если вы используете разумно текущий спящий режим, вы можете сопоставить строку java с базой данных CLOB без использования пользовательского UserType.

Попробуйте

@Lob 
public String getLongField() { return longField; } 

с Longfield просто String.

Если это работает, это будет намного проще, чем то, что вы делаете.

+0

Спасибо за указатель. Но я не использую аннотации, и я не знаю, как «перевести» это. – Marvo

+0

Возможно, есть способ сделать это и с xml, но я не знаю перевода сразу. –

+0

Знаешь что? Я случайно делал это «правильным» способом. Когда я перегенерировал мои pojos из моих картографических файлов сегодня, мои тесты на этих полях clob сломались. Причина в том, что отображение было там, но POJO имели те поля, которые были определены как строки. И Hibernate только что-то волшебным образом справляется с этим. – Marvo

Смежные вопросы