Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未能>;从类型[java.lang.Object[]转换为类型>;[com.rh.app.batch.domain.A]java_Java_Spring_Jpa_Spring Boot - Fatal编程技术网

未能>;从类型[java.lang.Object[]转换为类型>;[com.rh.app.batch.domain.A]java

未能>;从类型[java.lang.Object[]转换为类型>;[com.rh.app.batch.domain.A]java,java,spring,jpa,spring-boot,Java,Spring,Jpa,Spring Boot,我试图从表B中获取数据,并将其保存到类对象A中 A sale = repository.getSale(m, stmtDate); 存储库 public interface repository extends JpaRepository<B, String> { @Query(value = " SELECT ID AS id FROM B...LEFT JOIN C ... ", nativeQuery = true) A getSale(@Param("m") St

我试图从表B中获取数据,并将其保存到类对象A中

 A sale = repository.getSale(m, stmtDate);
存储库

public interface repository extends JpaRepository<B, String> {
@Query(value = " SELECT ID AS id FROM B...LEFT JOIN C ... ", nativeQuery = true)
    A getSale(@Param("m") String m, @Param("date") String stmtDate);
}
错误

org.springframework.core.convert.ConversionFailedException:未能 从类型[java.lang.Object[]转换为类型 [com.rh.app.batch.domain.A]获取值 “{0e89c64c-d840-45c5-9c6a-bda52fbaa7d1,201802,5.000,1,0,0}”; 嵌套异常是 org.springframework.core.convert.ConverterNotFoundException:否 发现转换器能够从类型[java.lang.String]转换为 键入[com.rh.app.batch.domain.A]


存储库接口方法返回
A.class
type对象,其中作为查询返回
String(id)

尝试将查询更改为
SELECT*FROM.

或者更改方法签名,如
字符串getMerchantsAllexn(…

编辑 要从一个表存储另一个表中的数据,必须执行以下操作

B b = bRepository.findByMyId(myId);
A a = b.getA();  //some method that converts B to A
aRepository.save(a);
还原法

@Query("select * from b where myId=:myId")
B findByMyId(myId);

我不确定这是否是您正在寻找的,但是,当您想要将复杂查询的结果映射到一个对象时,可以使用注释:

假设你有一门像这样的课

public class PersonDTO {

private String name;
private Date birthDate;
//omit other attributes 

public Person(String name, Date birthDate) {
  this.name = name;
  this.birthDate = birthDate;

}
你按如下方式装饰它

@SqlResultSetMapping(name="PersonDTOMapping",
                     classes="@ConstructorResult(
                     targetClass= PersonDTO.class,
                     columns = {@ColumnResult(name="name"),
                                @ColumnResult(name="birhDate")}))
您的查询变成:

PersonDTO person = (PersonDTO) em.createNativeQuery("select p.name, p.birthDate as date from person where p.id=1", "PersonDTOMapping").getSingleResult();

请让我知道,如果这是您正在寻找的。

在我的情况下,通过添加默认构造函数解决了问题。 例如:

public Person() {
}

存储库将只映射同一存储库中的对象。如果类不匹配,则会出现该错误

你有jpa积极的

public interface repository extends JpaRepository<B, String> {
@Query(value = " SELECT ID AS id FROM B...LEFT JOIN C ... ", nativeQuery = true)
    A getSale(@Param("m") String m, @Param("date") String stmtDate);
}
这是对象类型B的存储库


但是您正在转换为类型对象A。在存储库中执行此操作,它将起作用(假设您有正确的列).

但存储库将从others表返回others数据。所有数据都将存储到类对象A中。但这将使用不同的方法。您的方法签名与查询结果不匹配是类A实体还是简单的POJO/DTO?您的存储库方法返回类型仍然与查询返回类型不匹配。另外演示如何将记录从一个表保存到另一个表的编辑答案other@EiriniGraonidou是
@实体