У меня есть объект Hibernate, который имеет одно или несколько сопоставлений <many-to-one
, например,
<hibernate-mapping>
<class name="MyClass" table="my_table">
<cache usage="nonstrict-read-write"/>
<composite-id>
<key-property name="id" length="30"/>
<key-property name="someRef" length="30" column="foreign_key_to_something"/>
</composite-id>
<many-to-one name="mappedProperty" column="foreign_key_to_something" insert="false" update="false"/>
<property name="foo" column="foo"/>
...
</class>
</hibernate-mapping>
Мне нужно создать такой объект и получить немедленный доступ к mappedProperty
после создания.Здесь я вижу два подхода:
1) Создайте сущность и установите все связанные сопоставления <many-to-one
вручную.Очевидным недостатком этого подхода является необходимая работа, особенно если количество отображаемых <many-to-one
объектов велико.Зачем делать что-то вручную, если Framework может сделать это за вас?
2) Создайте сущность, только инициализировав необходимые параметры (например, первичные ключи, id
и someRef
в приведенном выше случае), затем сохраните и повторно-Загрузите это немедленно.Загрузка должна инициализировать mappedProperty
автоматически или обеспечивать отложенную инициализацию по требованию.
Я предпочитаю вариант 2), однако я заметил, что в некоторых случаях свойство mappedProperty
не устанавливается.load()
возвращает тот же объект, который я передал create()
, только с инициализированными первичными ключами.Я до сих пор не уверен, почему это происходит, но для борьбы с этим мне пришлось бы отсоединить объект от сеанса Hibernate, чтобы load()
был вынужден перейти в базу данных и получить заново.Опять же, звучит довольно сложно, не так ли?
Я что-то здесь упускаю?Есть ли другие способы решения этой проблемы?