在从DB表检索记录时,我们会得到异常。我试着用同样的方法来处理另一张表,但是对于这个表,它不起作用。我正在使用spring-data-jpa
@Entity
@Table(name=USR.TABLE_NAME)
public class USR implements Serializable {
private static final long serialVersionUID = 1L;
public final static String TABLE_NAME = "usr_profile";
@Id
@Column (name="USR_NO")
private Integer usrNo;
@Column (name="USR_Address", length=20, nullable=true, unique=false)
private Integer usrAddress;
@Column (name="USR_COUNTRY", nullable=true, unique=false)
private String usrCountry;
other fields constructor, no-arg constructor, getter and setter removed for brevity
@Repository
public interface USRRepository extends JpaRepository<USR, Integer> {
@Query("SELECT o.usrNo, o.usrAddress, o.usrCountry, o.usrState, o.usrSt FROM USR o WHERE o.usrNo=?1")
USR findUsrRecordByUsrNo(Integer usrNo);
}
在这里,我创建了一个具有get映射的Controller类
@GetMapping ("/CmpUsr")
public ResponseEntity<String> cmpLookup() {
USR us = usrRepository.findUsrRecordByUsrNo(12557);
return new ResponseEntity<>(us.toString(), HttpStatus.OK);
}
我得到了这个例外
严重:用于servlet org.springframework.core.comvert.ConverterNotFoundException:的Servlet.service()在与path[]的上下文中抛出异常(请求处理失败;嵌套的异常是path[]未能从类型[java.lang.Object[]]转换为值的com.newprof.userApp.domain.USR类型(12557,115号Minesota黄色Rd,US,PH,000991);嵌套的异常是org.springframework.core.comvert.ConverterNotFoundException: No转换器,发现它能够从类型[java.lang.Integer到com.newprof.userApp.domain.USR类型]进行根本原因的转换。
发布于 2022-04-13 19:00:45
试试这段代码。我认为问题在于返回对象与选择值不一样。
@Repository
public interface USRRepository extends JpaRepository<USR, Integer> {
@Query("SELECT o FROM USR o WHERE o.usrNo=?1")
USR findUsrRecordByUsrNo(Integer usrNo);
}
发布于 2022-04-13 18:10:55
改变这一点:
@Query("SELECT o.usrNo, o.usrAddress, o.usrCountry, o.usrState, o.usrSt FROM USR o WHERE o.usrNo=?1")
USR findUsrRecordByUsrNo(Integer usrNo);
}
在这方面:
@Query("SELECT new com.newprof.userApp.domain.USR(o.usrNo, o.usrAddress, o.usrCountry, o.usrState, o.usrSt) FROM USR o WHERE o.usrNo=?1")
USR findUsrRecordByUsrNo(Integer usrNo);
}
例外地,它说:未能从类型[java.lang.Object[]]转换为com.newprof.userApp.domain.USR类型。
这基本上意味着查询语句返回一个对象数组:java.lang.Object[]。
因此,我的计划是,在查询中直接调用USR构造函数。
编辑
找到答案了。
因此,您在查询中添加了以下内容:
new com.newprof.userApp.domain.USR(o.usrNo, o.usrAddress, o.usrCountry, o.usrState, o.usrSt)
它现在对您说:无法解析构造函数com.newprof.userApp.domain.USR()。是鲁格特。因为没有这样的构造函数。你需要把它添加到你的实体中。
您需要添加这样的内容:
public USR (Integer usrNo, Integer usrAddress, String usrCountry, String usrState, String usrSt) {
this.usrNo = usrNo;
this.usrAddress = usrAddress;
this.usrCountry = usrCountry;
this.usrState = usrState;
this.usrSt = isrSt;
}
这个全新的构造函数将在语句new com.newprof.userApp.domain.USR(o.usrNo, o.usrAddress, o.usrCountry, o.usrState, o.usrSt)
:D中调用。
https://stackoverflow.com/questions/71861930
复制相似问题