我试图从表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);
}
A类
@Entity
public class A implements Serializable {
private String id;
public String getID() {
return id;
}
public void setID(String id) {
this.id = id;
}
}
.....
错误
org.springframework.core.convert.ConversionFailedException:失败 从类型[java.lang.Object []]转换为type [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]
答案 0 :(得分:1)
我不确定这是否是您要查找的内容,但是当您想要将复杂查询的结果映射到一个对象时,您可以使用SqlResultSetMapping注释:
假设你有一个类似的课程。
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();
如果您正在寻找,请告诉我。
答案 1 :(得分:1)
就我而言,该问题通过添加默认构造函数得以解决。 例如:
public Person() {
}
答案 2 :(得分:0)
您的存储库接口方法返回A.class
类型对象,其中查询返回String (id)
尝试将查询更改为
SELECT * FROM..
或者更改方法签名
String getMerchantSaleTxn(...
为了存储来自其他表的数据,您必须执行以下操作
B b = bRepository.findByMyId(myId);
A a = b.getA(); //some method that converts B to A
aRepository.save(a);
bRepository方法
@Query("select * from b where myId=:myId")
B findByMyId(myId);
答案 3 :(得分:0)
存储库将仅映射同一存储库上的对象。如果类不匹配,则会出现该错误。
你有 JpaRepository
这是一个对象类型 B 的存储库
但是您正在转换为类型对象 A。在 A 的存储库中执行此操作,它将起作用(假设您有正确的列)。