我可以在hibernate中使用单表继承从扩展实体中选择所有超级对象吗?

时间:2016-07-28 01:50:07

标签: java hibernate inheritance hibernate-mapping

我认为在我的用例中使用单表继承是一个好主意 - 能够在一个表中存储不同的内容类型。在我的情况下,存储不同的文章类型(链接,文本,图像)。

  1. text(基类)
    • 条款ArticleID
    • 文本
  2. 链接(文字扩展名)
    • super(articleId,text)
    • 链接
  3. 图片(文字扩展名)
    • super(articleId,text)
    • 图像
    • imageDescription
  4. 我正在制作不同文章(图片,文字和链接)的 Feed ,并遇到了我无法解决的问题{ {1}}并包含超级课程?有没有解决的办法?我选择了错误的数据库架构设置吗?

    如果我能够 从文本中选择所有内容 并且拥有链接&包括图像对象。

    我面临的另一个问题是我是否应该在春季为我的select * from text课程使用一个控制器?目前,我为每个扩展实体提供了3种不同的控制器和3种不同的服务?!

1 个答案:

答案 0 :(得分:0)

文本既是成员又是实体本身?我不建议这样做。但我尝试将控制器集中在请求和响应交互上。您不一定需要每个实体的控制器。我这样做了,我发现它使我的应用程序围绕实体而不是用户尝试的过程。绝对是每个实体的Dao和服务,但控制器是关于用户在我看来与应用程序进行交互。

我不确定你在hibernate中查询基表的问题。我知道你可以在JPA中使用treat()JPA Criteria Query over an entity hierarchy using single table inheritance做类似的事情。但我不会这样做。而只是在Text Service层中具有此功能,该层可以访问所需的所有Daos。当然,如果你有数百个类扩展文本我会寻找你正在寻找的类型的解决方案,但看到你只有3我认为解决方案没问题,你只会有3个daos。

这样做也意味着您不必担心摆脱单表策略。

所以在服务层,它只是:

List<String> texts = textDao.getAllText();
texts.addAll(linkDao.getAllText());
texts.addAll(imgDao.getAllText());
return texts;

可能是最简单的。