简体   繁体   English

Spring Data JPA 获取多个结果集

[英]Spring Data JPA get multiple result set

I try to get the return value using JPA.我尝试使用 JPA 获取返回值。 But my database Procedure returns multiple results, and JPA only gets the first return value.但是我的数据库过程返回多个结果,而 JPA 只获取第一个返回值。 as the picture shows.如图所示。 The result I want is the third one, but I only get the first one.我想要的结果是第三个,但我只得到第一个。 How to get the third one?第三个怎么获得? Thanks.谢谢。

Java Result Database Result Java 结果数据库结果

Entity.java实体.java

@Entity
@NamedStoredProcedureQueries(
        {
                @NamedStoredProcedureQuery(
                        name = "SpringTestProcedure",
                        procedureName = "SpringTestProcedure",
                        parameters = {
                                @StoredProcedureParameter(mode = ParameterMode.IN, name = "id", type = Test.class),
                                @StoredProcedureParameter(mode = ParameterMode.IN, name = "firstName", type = Test.class),
                                @StoredProcedureParameter(mode = ParameterMode.IN, name = "lastName", type = Test.class)
                        }
                )
        }
)

@Table(name = "Users")
public class Test {

public Test() {
}

public Test(Integer id, String firstName, String lastName) {
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@Column(name = "firstName")
private String firstName;

@Column(name = "lastName")
private String lastName;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

} }

Repository.java存储库.java

 @Repository
public interface SpringTestRepository extends JpaRepository<Test, Integer> {

    @Procedure(procedureName = "SpringTestProcedure")
    public List<Object[]> getEntity(@Param("id") Integer id,
                                    @Param("firstName") String firstName,
                                    @Param("lastName") String lastName);

}

ServiceImpl.java ServiceImpl.java

@Service
public class SpringTestServiceImpl implements SpringTestService {

    @Autowired
    private SpringTestRepository springTestRepository;

    @Override
    public Test getEntity(Integer id, String firstName, String lastName) {
        List<Object[]> list = springTestRepository.getEntity(id, firstName, lastName);
        for (Object[] object : list) {
            System.out.println(Arrays.toString(object));
        }
        return null;//springTestRepository.getEntity(id, firstName, lastName);
    }
}

Change the type of parameters更改参数类型

        parameters = {
                 @StoredProcedureParameter(mode = ParameterMode.IN, name = "id", type = Integer.class),
                 @StoredProcedureParameter(mode = ParameterMode.IN, name = "firstName", type = String.class),
                 @StoredProcedureParameter(mode = ParameterMode.IN, name = "lastName", type = String.class)
        }

Change method getEntity更改方法getEntity

@Override
public Test getEntity(Integer id, String firstName, String lastName) {
    List<Test> list = springTestRepository.getEntity(id, firstName, lastName);
    for (Test test : list) {
        System.out.println(test.getId()+" "+test.getFirstName()+" "+test.getLastName());
    }
    return list.get(2);//springTestRepository.getEntity(id, firstName, lastName);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM