Подтвердить что ты не робот

2 объекта JPA в одной таблице

Скажем, у меня есть таблица с 200 столбцами, и большинство из них никогда не используются.

Я сопоставляю SmallEntity с 10 столбцами, которые часто используются. Я использую его в ассоциациях с другими объектами. Он быстро загружается, потребляет мало памяти и делает меня счастливым.

Но иногда мне нужно отображать 200 столбцов. Я хотел бы сопоставить класс BigEntity на 200 столбцах. Он не связан ни с каким другим сущностью, он не имеет ассоциации.

Вопрос: Есть ли у вас опыт? Знаете ли вы о каких-либо проблемах, которые имели бы Hibernate, например, в кеше первого уровня, грязной проверке и жизненном цикле объекта вообще?

4b9b3361

Ответ 1

Самый простой способ сделать это - сопоставить свойства, которые вы часто не используете, например lazy:

<property name="extendedProperty" lazy="true" />

... or using Annotations ...

@Basic(fetch = FetchType.LAZY)
String getExtendedProperty() { ... }

Спящий режим не будет загружать такие свойства изначально; вместо этого они будут загружаться по требованию (при первом доступе). Вы можете заставить Hibernate загружать все свойства, используя fetch all properties в вашем запросе HQL.

Другой возможный сценарий состоит в том, чтобы на самом деле отобразить два полностью отдельных объекта в одну и ту же таблицу, но сделать один из них неизменным. Имейте в виду, что они будут рассматриваться как разные объекты с помощью Hibernate, причем кеш первого/второго уровня полностью разделен для обоих (поэтому важна неизменяемость).

Вы можете НЕ выполнить эту функцию через сопоставление наследования, потому что Hibernate всегда возвращает фактический конкретный тип объекта. Взгляните на мой ответ на Hibernate Inheritance Strategy для подробного объяснения.