当前位置: 首页 > 知识库问答 >
问题:

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

窦涵忍
2023-03-14

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

我有一个超类,它的属性是使用<code>@MappedSuperClass</code>映射的。

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

有什么方法可以实现这一点吗?

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

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

提前致谢。

共有1个答案

太叔栋
2023-03-14

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

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

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

头发颜色不适用于。我们应该把它移到Dog或创建一个新的中间类,例如哺乳动物

class Animal {
  float weight;
}
class Mammal extends Animal {
  Color[] hairColors;
}
class Dog extends Mammal {}
class Fish extends Animal {}
 类似资料:
  • 问题内容: 我的数据模型代表法人实体,例如企业或个人。两者都是纳税实体,都具有TaxID,电话号码和邮件地址的集合。 我有一个Java模型,其中有两个扩展抽象类的具体类。抽象类具有两个具体类共有的属性和集合。 我正在 MySQL* 数据库上使用 Hibernate JPA注释,其类如下: * 问题是,和对象需要参考他们的主人,这是一个。hibernate抱怨: 看来这将是一个相当普遍的Java继承

  • 问题内容: 我有一个抽象的MappedSuperClass,参与者,并通过三种“参与者”进行了扩展。然后,每个人都使用自己的“项目”,也使用抽象的MappedSuperClass。但是,我希望基类了解Projects,以便编写通用代码与参与者进行交互。如何使用Hibernate批注指定此内容?以及如何在ExtendedParticipant和ExtendedProject类中覆盖它? 每个参与者类

  • 帮助我解决我的问题...当我使用方法时,我在映射方面遇到了问题。 型号:Bus Bus\U id pk号 驱动程序driver_idpk名称 巴士司机bus_idfkdriver_idfk 巴士 驾驶员 1级-驾驶员: 2类-总线公共类BusDAOImpl实现BusDAO{ 我的映射: 主类: } hibernate.cfg 工厂 HibernateUtil: 错误文本:

  • 问题内容: 通用实体,超类: pojo: 我尝试使用那些注释:@ AttributeOverride,@ Id等,但是它不起作用。你能帮助我吗?我想覆盖属性“ id”以通过pojo / table指定另一个列名和一个序列。最好的方法是什么? 问题答案: 试试这个,代替

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 问题内容: 我有一个User类,我想使用Jackson映射到JSON。 我使用-将其映射到JSON字符串 我不想映射变量。有什么方法可以配置映射器,使其忽略此字段? 我知道我可以编写自定义数据映射器或使用Streaming API,但我想知道是否可以通过配置来做到这一点? 问题答案: 您有两种选择: 杰克逊致力于田野工匠。因此,您只需删除要在JSON中省略的字段的getter。(如果您不需要在其他