Hibernate - 不要映射超类中的某些字段

时间:2013-07-19 12:46:59

标签: hibernate jpa

我正在使用Hibernate 4.1和Annotations进行从Java到DB的映射。

我有超类,其属性使用@MappedSuperClass进行映射。

这个类有许多子类,但有些属性对某些子类无效,因此我不想将它们映射到这些子类的数据库。

有没有办法实现这个目标?

另外,我不确定这是否是正确的设计,只有超类的属性子集适用于子类?如果有人能给我一个合理的理由,我愿意改变设计。

那就是说,我仍然有兴趣知道原始问题是否可以使用JPA / Hibernate解决。

先谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定是否有办法用Hibernate做你想做的事,但听起来真正的问题在于你的设计/类结构。简而言之,不适用于所有子类的字段可能不应该驻留在超类中。

您应该将字段移动到它们应用的子类,或者创建一个包含这些字段的新中间类并将其扩展。例如,考虑这个类结构:

class Animal {
  float weight;
  Color[] hairColors;
}
class Dog extends Animal {}
class Fish extends Animal {}

hairColors不适用于Fish。我们应该将其移至Dog或创建一个新的中间类,例如Mammal

class Animal {
  float weight;
}
class Mammal extends Animal {
  Color[] hairColors;
}
class Dog extends Mammal {}
class Fish extends Animal {}