jpa从两个表中选择没有关系

时间:2015-11-12 18:53:48

标签: jpql

我有两个jpa实体。说A和B. A和B没有任何关系。它们都有一个共同的列“id”。 A的这个id和B的id在它们彼此不相关的意义上是完全不同的。

考虑A:

id col1 col2

1 g l

5小时

考虑B:

id col3 col4 col5

2 p h i

7 j l k

现在我应该得到一个由A和B实体组成的列表,按其id值排序,如下所示。还需要一个表示其类型的额外新列:

A a 1 g 1

输入B 2 p h i

A型5小时

输入B 7 j l k

所以这个列表应该在结果集中返回,我应该能够将每个结果实体最终添加到它自己的A和B实体类型列表中。任何人都可以帮我查询完成这个。我们应该如何通过jpql做到这一点?

1 个答案:

答案 0 :(得分:0)

我不确定这是不是很好的设计但是你可以做的是有一个标记类并使用它来获得id然后有A& B扩展标记类并使用标记类来组合它们。

代码段:

标记类:

public class MarkerClass {
   private int id;

   public int getId() {
      return id
   }
  // you need to implement a hash code and equals here
  // you can have other common fields here
}

A类:

public class A extends MarkerClass {
    private String col1;
    private String col2;
    ....
    // getters for them
}

B类

public class B extends MarkerClass {
    private String col1;
    private String col2;
    ....
    // getters for them
}

现在你可以把它们组合起来像

List< MarkerClass > listOfAllAAndB = new ArrayList();
listOfAllAAndB.addAll(allA);
listOfAllAAndB.addAll(allB);
Collections.sort(listOfAllAAndB, myCustomComparator);

希望这有帮助。