Java 如何定义可重用<;发电机>;hibernate映射中的元素
我有一个HibernateJava 如何定义可重用<;发电机>;hibernate映射中的元素,java,hibernate,Java,Hibernate,我有一个Hibernatehbm.xml映射文件,它定义了大量的类映射。每一个都需要一个定义和相应的定义 在这个特定的应用程序中,定义非常复杂,包括设置许多参数(例如,增量大小、优化器等)。必须为每个类重复这个定义是很乏味的,并且会使映射变得混乱 如果我使用JPA注释,我可以在包级别定义ID生成器。但我并没有使用JPA(也不是一个选项),而且似乎最奇怪的是能够在JPA中做一些事情,而不是原生hibernate 我可以在其他地方指定生成器,并在映射中多次引用它吗?一种解决方法是在模板XML中定义它
hbm.xml
映射文件,它定义了大量的类映射。每一个都需要一个
定义和相应的
定义
在这个特定的应用程序中,
定义非常复杂,包括设置许多参数(例如,增量大小、优化器等)。必须为每个类重复这个定义是很乏味的,并且会使映射变得混乱
如果我使用JPA注释,我可以在包级别定义ID生成器。但我并没有使用JPA(也不是一个选项),而且似乎最奇怪的是能够在JPA中做一些事情,而不是原生hibernate
我可以在其他地方指定生成器,并在映射中多次引用它吗?一种解决方法是在模板XML中定义它,然后使用一个小型XML程序或XSLT脚本来构建映射文件
这还允许您重用其他事物的定义(如复杂的列映射)。这是Hibernate注释支持但Hibernate Core不支持的极少数事物之一。我过去处理这个问题的方式是:
IdentifierGenerator
实现;让它实现可配置
afterPropertiesSet()
)使用bean id作为键向上述映射添加bean属性。底层生成器“策略”就是这些属性之一Configurable.configure()
通过IdentifierGeneratorFactory.getIdentifierGeneratorClass()
获取底层生成器,并使用传递给configurate()
的属性实例将其初始化,该实例与从上述映射中检索的属性合并<generator class="com.mypackage.PredefinedGenerator">
<param name="preset">preset1</param>
</generator>
预设1
在您的Spring环境中:
<bean id="preset1" class="com.mypackage.PredefinedGenerator">
<property name="parameters"><props>
<prop key="generatorStrategy">seqhilo</prop>
<prop key="sequence">my_sequence</prop>
<prop key="max_lo">500</prop>
</props></property>
</bean>
塞奇洛
my_序列
500
当然,如果您不需要多个预设,这可以简化。由于法律原因,我不能发布实际代码;但如果您对这种方法感兴趣,但上面的内容不清楚,请发表评论,我将尝试澄清