将对象数组映射到Bean

时间:2019-05-27 22:50:40

标签: java

我正在通过JPA进行SQL查询并获取对象数组列表。我希望将这些对象数组映射到bean中。

例如,我的查询给我以下输出。

List<Object[]> list = // myWorkingJpaQuery;
// list is of length 2. 
// Each Object array always holds a Long in index 0, 
// a TimeStamp in index 1 and a String in index 2. 

我希望将其映射到一个类,而不是读取这些值并进行强制转换:

class ExampleClass{
    //all these variables matches the aliases in myWorkingJpaQuery.
    Long id;
    TimeStamp ts;
    String name;
    // get set
}  

试图使用以上类,我更改了JPA方法的返回类型,并按如下所示在调用类中对其进行了分配,但它不起作用。

List<ExampleClass> list = // myWorkingJpaQuery with List<ExampleClass> as return type;

有没有办法做到这一点?如果我坚持使用Object Array,但只是尝试不使用Objects和Casting,则目前工作正常。供参考,我使用的是Spring。

2 个答案:

答案 0 :(得分:0)

您的ExampleClass是否有构造函数? 如果是,您应该能够执行以下操作:

List<ExampleClass> myList = new ArrayList<ExampleClass>();
List<Object[]> list = // myWorkingJpaQuery;
for (int i = 0; i < list.size(); i++) {
        ExampleClass obj = new ExampleClass(list.get(i)[0],list.get(i)[1],list.get(i)[2]);
        myList.add(obj);
    }

您完成了

答案 1 :(得分:0)

假设您使用的是本机查询(否则,ORM工具将自动为您执行此操作):

您可能会有这样的代码:

 EntityManager em = ...
 Query q = em.createNativeQuery("SELECT ...");
 List<Object[]> results = q.getResultList();

在这种情况下,您可以考虑将附加参数传递给createNativeQuery方法:

 Query q = em.createNativeQuery("SELECT...", ExampleClass.class);
 List<ExampleClass> results = q.getResultList();

对于更复杂/自定义的映射,请考虑使用Result Set Mappings feature