【问题标题】:How to query two SQL tables with the same structure using criteria api?如何使用criteria api查询两个结构相同的SQL表?
【发布时间】:2015-11-30 15:08:41
【问题描述】:

我有一个存档数据库,其中有 2 个具有相同结构的表,EvntSumaryT 是活动的,ArchiveEvntSumaryT 是存档的。我想更改仅查询 EvntSumary 的当前标准 api 代码,以便它将根据用户选择的日期从两个表中获取数据并将结果返回到列表中。 我的问题是它们在 hibernate-criteria 中没有联合功能,所以我如何能够一次查询两个表并将结果组合到一个列表中?

下面是我的 jpa 实体类的代码。我已将活动表的实体设置为父类,将子类设置为 ArchiveEvntSumaryT,因为它们共享相同的字段,所以从它扩展。

@Entity
@Table(name="EVNT_SUMARY_T")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class EvntSumaryT {
    //fields 
    //getters and setters
}

@Entity
@Table(name="ARCHIVE_EVNT_SUMARY_T")
public class ArchiveEvntSumaryT extends EvntSumaryT {


}

这是我在归档数据库之前在 DAO 类中的标准 api 查询。

public List<EvntSumaryT> getAllTransaction(SearchCriteria sb) {
    //criteria
    return ls;

}

如果没有 Union 函数,我如何能够查询两个表并将结果返回到列表中?

【问题讨论】:

  • JPA 查询返回多态结果,无需任何特定处理。如果您将根类作为候选对象,则还包括子类实例......除非您添加了一些 WHERE 子句将它们限制为仅根类
  • 那么如果我查询父类,它也应该返回子类的结果?但它没有这样做。会不会是我设置继承不对?
  • 调试问题是通过查看日志中生成的 SQL 来完成的。

标签: java sql-server hibernate jpa criteria-api


【解决方案1】:

我想通了。我最终没有使用继承来替换联合函数,而是在数据库中创建了一个视图,它是两个表的联合,并将实体映射到视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2017-07-18
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多