Spring Data JPA获取多个结果集



我尝试使用JPA获得返回值。但是我的数据库过程返回多个结果,JPA只获得第一个返回值。如图所示。我想要的结果是第三个,但我只得到了第一个。如何得到第三个?谢谢。

Java的结果数据库结果

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

@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

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

修改参数类型

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

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

最新更新