2009-06-09 122 views
3

设置:我有一个对象(AProduct)在我的数据库中由hibernate持久化。该对象引用存储在存储库中的另一个对象(AComponent)。在产品的数据库表中,只应存储组件的ID。通过加载产品,我想从我的存储库加载正确的组件。Hibernate从存储库加载UserType对象

我的解决方法到目前为止是创建一个用户类型的组件仅保存其ID。到目前为止,这很容易。加载组件也不是什么大问题,因为我有这个ID。

我的问题是如何让一个链接到ComponentUserType库。

我使用的Java和Hibernate /注解,但解决办法可能是独立的。

+0

你能提供一些关于资料库的更多细节吗? – 2009-06-09 17:25:19

回答

1

通过“仓库”我想你的意思是不是数据库的其他数据的一些外部来源。一个Web服务或什么?无论如何,如果到存储库的链接是静态配置,并且所有产品对象都是相同的,那么可以使用静态访问器方法(例如“getInstance()”)创建单例对象来保存配置。 UserType对象然后可以从单例中获取存储库配置。如果你使用Spring这样的依赖注入框架,你甚至可以用它来从属性文件或其他东西中初始化单例。更好的选择是使用Spring(或Guice或其他)将配置直接推送到UserType中。但是由于UserType对象的生命周期是由Hibernate控制的,这可能会非常棘手。

如果存储库链接是每个产品的不同,那么它是有道理的,将其保存在数据库中的ID一起。一种方法是创建一个封装ID库配对的类以及对组件的引用。然后,使用该类作为产品类中的属性类型,并将Hibernate UserType映射到该类的两个列,以分别保存该ID和链接。

0

是否使用Spring框架初始化应用程序栈?如果是这样,请查看SingletonBeanFactoryLocator,它将帮助您以适合Spring的方式访问您的应用程序资源。

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

如果你不使用Spring,我会考虑使用从静态类在你的应用程序栈的地方露出一个ThreadLocal。在使用UserType之前,您需要确保您的Repository绑定到ThreadLocal。