Спящий режим загрузки объекта UserType из хранилища - PullRequest
3 голосов
/ 09 июня 2009

Параметр: у меня есть объект (AProduct), сохраненный в спящем режиме в моей базе данных. Этот объект ссылается на другой объект (AComponent), хранящийся в хранилище. В таблице базы данных продукта должен храниться только идентификатор компонента. Загружая продукт, я хочу загрузить правильный компонент из своего хранилища.

Мое решение пока состоит в том, чтобы создать UserType для компонента, чтобы сохранить только его ID. Пока все просто. Загрузка компонента также не имеет большого значения, потому что у меня есть идентификатор.

Моя проблема заключается в том, как получить ссылку на хранилище в ComponentUserType.

Я использую Java и Hibernate / Annotations, но решение может быть независимым.

Ответы [ 2 ]

1 голос
/ 09 июня 2009

Под "хранилищем" я предполагаю, что вы имеете в виду некоторый внешний источник данных, отличный от базы данных. Веб-сервис или что-то? В любом случае, если ссылка на репозиторий имеет статическую конфигурацию, которая одинакова для всех объектов продукта, вы можете создать одноэлементный объект со статическим методом доступа (например, «getInstance ()») для хранения конфигурации. Объект UserType может затем извлечь конфигурацию хранилища из синглтона. Если вы используете инфраструктуру внедрения зависимостей, такую ​​как Spring, вы можете даже использовать ее для инициализации синглтона из файла свойств или чего-то еще. Еще лучшей альтернативой было бы использование Spring (или Guice или чего-либо еще) для передачи конфигурации непосредственно в UserType. Но поскольку жизненные циклы объектов UserType контролируются Hibernate, это может быть непросто.

Если ссылка на репозиторий отличается для каждого продукта, то имеет смысл сохранить ее в базе данных вместе с идентификатором. Один из способов сделать это - создать класс, который инкапсулирует сопряжение ID-репозиторий, а также ссылку на компонент. Затем используйте этот класс в качестве типа свойства в своем классе продукта и попросите Hibernate UserType сопоставить этот класс с несколькими столбцами для хранения идентификатора и ссылки соответственно.

0 голосов
/ 09 июня 2009

Используете ли вы Spring Framework для инициализации своего стека приложений? Если это так, ознакомьтесь с SingletonBeanFactoryLocator, он поможет вам получить доступ к ресурсам вашего приложения Spring-friendly способом.

http://www.jdocs.com/spring/2.0.6/org/springframework/beans/factory/access/SingletonBeanFactoryLocator.html

Если вы не используете Spring, я хотел бы изучить использование ThreadLocal из статического класса где-нибудь в вашем стеке приложений. Вам нужно будет убедиться, что ваш репозиторий привязан к ThreadLocal перед использованием с вашим типом пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...