【问题标题】:Hibernate - Don't map some fields from super classHibernate - 不要映射超类中的某些字段
【发布时间】:2013-07-20 01:10:57
【问题描述】:

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

我有一个超类,其属性使用@MappedSuperClass 映射。

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

有什么方法可以实现吗?

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

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

提前致谢。

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    我不确定是否有办法用 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 {}
    

    【讨论】:

      最近更新 更多