请告诉我组件映射有什么区别 - 自定义值类型和何时使用它?
谢谢。
答案 0 :(得分:3)
值类型映射到单个数据库列。自定义值类型通常可以表示为单个列,但Hibernate无法识别(例如JodaTime DateTime
)。使用自定义值类型,您必须提供转换为列表示的所有逻辑。
组件更像是普通的hibernate映射类,除了组件的字段映射到父类表的列。组件类型的每个字段通常是值类型。当您将java类表示为多列时,可以使用组件,但不应该将它们放在自己的表中。
答案 1 :(得分:3)
嗯,你可以将它们用于类似的东西,但总的来说:
组件映射用于将部件直接映射到列。假设您有一个名称,该类是您的一个Hibernate实体(容器)的一部分。 Hibernate无法识别Name,因为它未映射,但您可以使用组件标记“分解”名称对象并将部件映射到Entity表。
现在,令人困惑的是你可以创建一个名为Name的自定义值类型。但是,在这种情况下你正在做的是创建一个值,就像Hibernate识别的Int或String一样,因为你使用一个特殊的接口来创建它。一个好的想法(从Hibernate文档中)这对于金钱价值来说是有用的。您可以创建一个值类型,告诉Hibernate如何处理您传递的这个货币对象。
您最有可能使用组件映射而不是自定义值类型。我相信我们的应用程序只使用了Joda Time的自定义类型,因为日历很糟糕。
答案 2 :(得分:2)
组件是映射为对象的列组,使它们可重用。它们易于实施。 自定义值类型实现起来有点困难。您必须实现某些hibernate接口。 在大多数情况下,我相信组件就足够了。 我们使用自定义类型来映射GIS值,这需要一些解析......