可以用Java Hibernate执行Union Query从2个数据表中获取数据吗

7jmck4yq  于 2022-10-01  发布在  Java
关注(0)|答案(1)|浏览(133)

这就是我在我的案例之后提供的例子

我希望将两个数据库表中的数据与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表中获取数据,或者给我解释一下

dl5txlt9

dl5txlt91#

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

@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();
    }

相关问题