java.util.ArrayList cannot be cast to class [Ljava.lang.Object; <springboot test>

Viewed 2470

I'm currently testing my JPA @Query and keep getting this error

enter image description here

<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>

Member Entity

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;
}


Status Entity

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;
}


MemberRepository

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

what I want to test is that @Query part.

so I made a test file as below

MemberRepositoryTests

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

}

I want to test this getMemberWithStatus method but getting those error above..

I think the problem is
Object[] arr=(Object[])result; this part what did I do wrong??

oh and for your information I did put some test data into DB

1 Answers

solve the problem by changing my code as below.

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

    }

Related