de-vraag
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Daniel Bower
Daniel Bower
Вопрос

Что отсутствует, когда Set является null вместо прокси-сервера Hibernate при выполнении тестирования интеграции с помощью Springframework?

Я новичок в спящем режиме и стараюсь начать с тестирования из ворот. Я был испорчен легкостью использования Grails в этой области ... Я использую Springframework 3.0.6 с Hibernate 3.6.8 и Junit 4.9.

Я пытаюсь понять, почему следующий тест не «видит» набор EventAttribute в объекте Event как набор объектов HibernateProxy, а вместо этого просто пустым. Кроме того, если я следую некоторым из составных свойств Event (свойств, сделанных из объектов в других таблицах), я тоже не вижу значений, но вместо них null.

Объект сохраняет очень хорошо в dao, и я вижу простые свойства (свойства в одной таблице). Однако assertNotNull не проходит тест ниже.

Я предполагаю, что что-то не так с моей конфигурацией тестирования, так что сессия уже закрыта. Мысли?

Модели:

@Entity
@Table(name = "event")
public class Event {

  /**
      ... some other properties ...
  */

  @OneToMany(mappedBy = "event")
  private Set eventAttributes = new HashSet(0);

  /**
      ... getters and setters ...
  */
}

@Entity
@Table(name = "event_attribute")
public class EventAttribute {

  /**
      ... some other properties ...
  */
  @ManyToOne(fetch = FetchType.LAZY)
  @ForeignKey(name = "FK_event_attribute_event")
  @JoinColumn(name = "event_id", nullable = false)
  private Event event;

  /**
      ... getters and setters ...
  */
}

Моя тестовая конфигурация:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("dao-testConfig.xml")
@TransactionConfiguration(defaultRollback = false)
@Transactional
public class EventAttributeDaoTest  {

  @Test
  public void save(){
    EventAttribute eventAttribute = new EventAttribute("a key", "a value", event);
    dao.save(eventAttribute);

    Event event2 = eventDao.getEventById(event.getId());
    assertNotNull(event2.getEventAttributes());
  }
}
1 2011-10-27T18:02:16+00:00 1
Программирование
hibernate
spring
junit4
Ralph
27-го октября 2011 в 9:15
2011-10-27T21:15:40+00:00
Дополнительно
Источник
Редактировать
#56791248

Проблема в том, что спящий режим НЕ будет поддерживать оба конца двунаправленного повторного действия для вас.

Поэтому до тех пор, пока вы не перезагрузите событие из базы данных, набор не будет обновлен. В вашем случае проблема заключается в том, что event2 больше не будет загружаться из базы данных, потому что она уже присутствует в текущем сеансе спящего режима.

You can prove that by assertSame(event2, event) //notice that SAME not only EQUALS

Поэтому, если вы очистите сеанс до того, как загрузите второе событие, то hibernate действительно загрузит его из db и создаст экземпляр нового объекта. В этом случае он также инициализирует set так, как вы ожидаете.

But: I my humble opinion, this is poor code. Better is to maintain both sides of the relationship by hand. So if you create an new EventAttribute, it should itselfe register to the Event, the same for changing. So that in the end the releatinship is correct maintained, even if the Object is not stored in the database.

0
0
Похожие сообщества 3
SpringRole Русский ЧАТ
SpringRole Русский ЧАТ
20 пользователей
Открыть telegram
Spring Framework – русскоговорящее сообщество
Spring Framework – русскоговорящее сообщество
10 пользователей
Общаемся на темы, посвященные Spring, Spring Cloud, Spring Boot, Spring Data, Spring Security и т.д. Вакансии и поиск работы: @spring_jobs См. также: @backend_ru @devops_ru @php_jobs @devops_jobs
Открыть telegram
Spring Framework – вакансии и резюме
Spring Framework – вакансии и резюме
7 пользователей
Вакансии и поиск работы – Spring, Spring Cloud, Spring Boot, Spring Data, Spring Security и т.д. Профессиональное общение по технологиям: @spring_ru См. также: @backend_ru @devops_ru @php_jobs @devops_jobs
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Roxana Elizabeth CASTILLO Avalos
Зарегистрирован 4 дня назад
2
Hideo Nakagawa
Зарегистрирован 5 дней назад
3
Sergiy Tytarenko
Зарегистрирован 1 неделю назад
4
shoxrux azadov
Зарегистрирован 1 неделю назад
5
Koreets Koreytsev
Зарегистрирован 1 неделю назад
© de-vraag 2022
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией