Почему диспетчер сущностей возвращает мне объект с нулевыми значениями?

У меня есть контроллер spring, который вызывает сервисный уровень, и он вызывает уровень Fao.

1) Я получаю объект пользователя, используя метод find() EntityManager-s. Он очень хорошо извлекает данные.

2) Каждый пользователь имеет отношения один ко многим со School Object.

@ManyToOne(fetch = FetchType.LAZY, optional=false)
    @JoinColumn(name="SCHOOL_ID", foreignKey = @ForeignKey(name = "FK_USER_SHCOOL"))
    private School school;

3) когда я получаю школу из объекта пользовательского объекта, спящий режим регистрирует мне SQL-запрос.

select school0_.id as id1_7_0_, school0_.ADDRESS as ADDRESS2_7_0_, school0_.CITY as CITY3_7_0_, 
school0_.DESCRIPTION as DESCRIPT4_7_0_, school0_.EMAIL as EMAIL5_7_0_, school0_.NAME as NAME6_7_0_, 
school0_.version as version7_7_0_ from SCHOOL school0_ where school0_.id=2

когда я запускаю этот запрос в SQL Client, я получаю настоящие и правильные данные!

4) НО когда я получаю школу от пользователя:

School s=user.getSchool() 

Он возвращает объект School, но все значения равны нулю.

Почему значения равны нулю? Я смущен. В логе все хорошо. Hibenate также регистрирует правильный запрос! Этот запрос возвращает данные, но значения диспетчера сущностей равны нулю. Что я могу сделать?

Если я изменю ЛЕНЬ НА ЖАЖДОСТЬ, ВСЕ РАБОТАЕТ ХОРОШО! НО МНЕ ЭТОГО НЕ НРАВИТСЯ Если я объединяю () существующую школьную сущность, она извлекает данные. Я не понимаю почему?


person grep    schedule 20.02.2015    source источник


Ответы (1)


Поскольку вы определяете FetchType.LAZY выборку для школьного столбца; взгляните на различия FetchType.LAZY и FetchType.EAGER из ЗДЕСЬ . Если вы хотите получить ненулевой школьный предмет, есть 2 варианта:

  1. Изменить FetchType.LAZY на FetchType.EAGER
  2. Когда ваш пользовательский объект постоянно вызывает user.getSchool() внутри @Transaction аннотированного метода.
person dogankadriye    schedule 23.02.2015