Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: инициализация внешний соединений / 6 сообщений из 6, страница 1 из 1
13.02.2006, 17:58
    #33541673
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: инициализация внешний соединений
Есть два класса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<class name="Document">
  <id name="id"/>
  <many-to-one name="status" class="Status" outer-join="true"/>
</class>

<class name="Status">
  <id name="id"/>
  <property name="name"/>
</class>

Поле Document.status в базе допускает NULL. При вытаскивании экземпляров класса Document Hibernate выставляет ему status = null. Можно ли его заставить каким-либо образом генерировать значение этого свойства? Поскольку иначе в Struts я получаю NullPointerException при попытке на форме определить его значение:

Код: plaintext
1.
2.
3.
<html:select property="status.id">
  <html:options collection="statuses" property="id" labelProperty="name"/>
</html:select>

При одиночном экземпляре это можно сделать самостоятельно, на списке тоже можно, но может есть более прямой способ?
...
Рейтинг: 0 / 0
13.02.2006, 19:40
    #33541924
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: инициализация внешний соединений
Ну можно например в getter'е Document.getStatus() написать

Код: plaintext
1.
2.
3.
4.
 if  (status ==  null )
  status = Status.DEFAULT_STATUS;

 return  status;

но imho - это уже проблемы представления, что мешает в jsp if использовать?
...
Рейтинг: 0 / 0
13.02.2006, 19:54
    #33541950
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: инициализация внешний соединений
funikovyuri wrote:
> но imho - это уже проблемы представления, что мешает в jsp if использовать?

Так для JSP требуется, чтобы это свойство было инициализированно, там
двузначности (есть/нет) быть не должно.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13.02.2006, 23:18
    #33542187
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: инициализация внешний соединений
а jstl <c:if ... /> ?
...
Рейтинг: 0 / 0
14.02.2006, 13:20
    #33543369
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: инициализация внешний соединений
funikovyuriа jstl <c:if ... /> ?
А смысл?;) Есть property="status.id" , Куда-то идентификатор выбранного статуса по-любому сохранять надо, наилучшим решением было бы обязательность инициализации поля status, обращение к его полю id не должно вызывать NullPointerException. Впрочем, делать это в getStatus() может и является наилучшим выходом.
...
Рейтинг: 0 / 0
17.03.2006, 14:11
    #33608123
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: инициализация внешний соединений
Denis PopovВпрочем, делать это в getStatus() может и является наилучшим выходом.
Лучше бы я этого не делал. Получается следующее: если загрузить экземпляр класса Document, в котором поле status инициализируется именно таким образом, то при закрытии сессии Hibernate пытается сохранить экземпляр обратно в базу, даже если это поле не читалось. В результате идет мощнейший поток необязательных обновлений. Но это еще не все, дополнительно можно нарваться на TransientObjectException. Единственным местом ИМХО остается изначальная инициализация поля.
Код: plaintext
1.
2.
 public   class  Document {
   private  Status =  new  Status();
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: инициализация внешний соединений / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]