【问题标题】:Is it possible to execute UNION query to get data from 2 data tables with java hibernate是否可以使用 java hibernate 执行 UNION 查询以从 2 个数据表中获取数据
【发布时间】:2022-10-01 01:25:28
【问题描述】:

这是我根据我的确切情况提供的示例

我希望将两个数据库表中的数据放入一个列表中,使用 UNION 或 java hibernate 中的任何其他查询

我尝试了以下 表 1 的实体这是我的第一个具有 2 列的数据表:

@Entity
@Table(name=\"TABLE\")
public class Table  {

        @Id
        @Column(name=\"NAME\")
        private String name;

        @Column(name=\"PHONE\")
        private String phoneNumber;


        public String getPhoneNumber() {
                return phoneNumber;
        }

        public void setPhoneNumber(String phone) {
                this.phoneNumber = phone;
        }
   }

我的第二个数据库表的此实体与第一个数据库表具有相同的列。

    @Entity
    @Table(name=\"TABLE_2\")
    public class Table2  {
    
            @Id
            @Column(name=\"NAME\")
            private String name;
    
            @Column(name=\"PHONE\")
            private String phoneNumber;
    
    
            public String getPhoneNumber() {
                    return phoneNumber;
            }
    
            public void setPhoneNumber(String phone) {
                    this.phoneNumber = phone;
            }
   }

我的查询:

select a from Table a union select a from Table2 a;

我获取数据并使用新对象存储到列表中的代码

    public ArrayList<DTO> getUsers(){

            ArrayList<DTO> flist = new ArrayList<DTO>();
            Query q = null;
            String query = null;
            query = \"select a from Table a UNION  select a from Table2 a\";
            try{
                    AppEntityManager appEntMgr = AppEntityManager.getAppEntityManager();
                    appEntMgr.startTransaction();
                    
                    q = appEntMgr.createQuery(query);
                    q.setFirstResult(0);
                    q.setMaxResults(10);
                    
                    List<Object[]> list = q.getResultList();
                    
                    DTO dto = null;

                    for (Object[] folderType: list) {
                            dto.setName((String)folderType[0]);
                            dto.setPhoneNumber((String)folderType[1]);
                            flist.add(dto);
                    }
           }catch (Exception e) {
                    log.error(\"Exception ::\" + e);
           }
            return flist;
    }

如果可以从 2 个 DB 表中获取数据或向我解释,请帮助我

    标签: java hibernate


    【解决方案1】:

    如果您使用每个类继承的表,那将是最简单的:

        @Entity
        @Inheritance(TABLE_PER_CLASS)
        public class TableBase {
        
                @Id
                @Column(name="NAME")
                private String name;
        
                @Column(name="PHONE")
                private String phoneNumber;
        
        
                public String getPhoneNumber() {
                        return phoneNumber;
                }
        
                public void setPhoneNumber(String phone) {
                        this.phoneNumber = phone;
                }
        }
    
        @Entity
        @Table(name="TABLE_1")
        public class Table1 extends TableBase {}
    
        @Entity
        @Table(name="TABLE_2")
        public class Table2 extends TableBase {}
    

    那么您可以使用以下代码:

        public ArrayList<TableBase> getUsers(){
            AppEntityManager appEntMgr = AppEntityManager.getAppEntityManager();
            appEntMgr.startTransaction();
            return appEntMgr.createQuery("select e from TableBase e", TableBase.class)
                        .setFirstResult(0)
                        .setMaxResults(10)
                        .getResultList();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 2011-10-23
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多