2012-04-13 69 views
1

我有一个实体的字符串属性,这是其他实体经常重复 - 这将(传统数据库)映射到自己的表。标准化重复值在休眠 - Java

例如:我可以有一个服装实体,每件衣服都有自己的对象或行。每件商品都会有一个品牌,但这个品牌(字符串)可能会被许多其他服装商品重复使用。 - 它本质上应该是一个manyToOne映射,尽管品牌本身并不是一个实体,它只是一个String。

我该如何做到这一点在冬眠?或者我应该为每个品牌创建一个实体并使用ManyToOne?

任何帮助将不胜感激!

回答

1

我认为,就database normalization(最具体地说是3NF)而言,如果您希望某列具有重复值,那么应该将这些值导出到它们自己的表中并且有一个外键列。这样,如果其中一个值发生了变化,您可以一次更改所有值。

这将允许您在Hibernate中使用ManyToOne。

但是,如果这是不可能的,我会建议使用Enum

+0

如果使用枚举,每次添加新品牌时都必须更新代码。给一个品牌它自己的实体可能会更有意义。 – 2012-04-13 18:58:52

+0

'ɲeuroburɳ'说的是真的,枚举不是一个好选择。到目前为止,我将使用ManyToOne,尽管我希望与嵌入在实体中的值类型(可嵌入)对象关联的解决方案。 – user1260191 2012-04-15 12:28:37

+0

我会同意关于枚举。规范化数据库本身是一个更好的选择。我也想过嵌入式对象,但它似乎不适用于您的问题。 [Embedded entites](http://schuchert.wikispaces.com/JPA+Tutorial+1+-+Embedded+Entity)用于处理多列,就好像它们是封闭实体所拥有的单独对象一样。这不是你问的。 – 2012-04-15 17:39:49