агрессивная оптимизация в спящем режиме getAssocation (). getId ()? - PullRequest
0 голосов
/ 16 декабря 2011

часто у меня такой сценарий использования:

объект A связан с B через отношение 1-1,

в коде, я часто просто использую A. * и A.getB (). GetId (), я никогда не использую никаких других свойств B (), поскольку идентификатор B фактически уже хранится в таблице A, мне не обязательно загружать В таблице, но hibernate всегда создает JOIN или последний SELECT, когда видит getB (). это огромная проблема, если таблица B большая или имеет свои собственные ассоциации

Есть ли способ оптимизации для этого особого варианта использования?

Спасибо Ян

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Hibernate один-к-одному: getId () без извлечения всего объекта

http://javaprogrammingtips4u.blogspot.com/2010/04/field-versus-property-access-in.html

в основном вам нужно вместо этого поместить аннотацию в getId ()частного целочисленного идентификатора.

с точки зрения файла сопоставления xml, вам просто нужно поместить access = "property" в тег вашего класса

1 голос
/ 16 декабря 2011

Я не думаю, что это возможно, потому что Hibernate не знает, что делает метод getId (): он может просто вернуть идентификатор (что, вероятно, имеет место в 99% случаев), но он также может преобразовать это, имеет некоторые побочные эффекты, записать некоторое сообщение где-нибудь, что угодно.

Я не совсем уверен, но я думаю, что вы могли бы сопоставить столбец B_ID в таблице A как базовый столбец (в дополнение к его сопоставлению как столбец соединения), если вы пометите столбец как не вставляемый и обновляемый. Если я прав, вы можете просто вызвать a.getBId (), чтобы получить идентификатор B без отложенной загрузки B.

...