,jpa,jpql"/>

首页 > 解决方案 > java.util.ArrayList 不能转换为类 [Ljava.lang.Object;

问题描述

我目前正在测试我的 JPA @Query 并不断收到此错误

在此处输入图像描述

<br>
class java.util.ArrayList cannot be cast to class [Ljava.lang.Object; (java.util.ArrayList and [Ljava.lang.Object; are in module java.base of loader 'bootstrap')

<br>

会员单位

package org.morgorithm.frames.entity;

import com.sun.istack.Nullable;
import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;


    private String name;

    private String phone;
}


状态实体

package org.morgorithm.frames.entity;

import com.sun.istack.Nullable;
import lombok.*;

import javax.persistence.*;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString(exclude={"member","facility"})
public class Status extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long statusnum;

    @ManyToOne(fetch=FetchType.LAZY)
    private Member member;

    @ManyToOne(fetch=FetchType.LAZY)
    private Facility facility;

    private double temperature;

    private Boolean state;
}


会员资料库

package org.morgorithm.frames.repository;

import org.morgorithm.frames.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface MemberRepository extends JpaRepository<Member,Long> {
    @Query("select m, s from Member m left join Status s ON s.member=m WHERE m.mno=:mno")
    List<Object[]> getMemberWithStatus(@Param("mno") Long mno);
}

我要测试的是@Query 部分。

所以我做了一个测试文件如下

成员存储库测试

package org.morgorithm.frames.repository;

import org.junit.jupiter.api.Test;
import org.morgorithm.frames.entity.Member;
import org.morgorithm.frames.entity.MemberImage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Commit;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.UUID;
import java.lang.Object;
import java.util.stream.IntStream;

@SpringBootTest
public class MemberRepositoryTests {
    @Autowired
    private MemberRepository memberRepository;
    @Autowired
    private MemberImageRepository memberImageRepository;

    @Test
    public void testGetMemberByMno(){
        Object result=memberRepository.getMemberWithStatus(100L);

        Object[] arr=(Object[])result;

        System.out.println("----------------------------*************************");

        System.out.println(Arrays.toString(arr));

        System.out.println("===================================");
    }

}

我想测试这种getMemberWithStatus方法,但得到上面的错误..

我认为问题是
Object[] arr=(Object[])result;这部分我做错了什么?

哦,为了您的信息,我确实将一些测试数据放入数据库

标签: jpajpql

解决方案


通过如下更改我的代码来解决问题。

@Test
    public void testGetMemberByMno(){
        List<Object[]> result=memberRepository.getMemberWithStatus(100L);
        List<Object> arr=Arrays.asList(result);
        for(Object[] a:result){
           System.out.println(Arrays.toString(a));
        }

    }


推荐阅读