在springBoot中,JPA findById()只接受整数类型的id.我想通过电子邮件ID找到它.有像findBy



我使用带有JPA的SpringBootApplication来定义控制器映射并执行CRUD操作。我想通过电子邮件ID从数据库中获取学生详细信息我在DAO中编写了SQL查询,但它以字符串格式返回SQL行如何映射到StudentDetail对象?findById只取整数类型的id。我想通过电子邮件ID找到它。有像findByEmailId这样的方法吗?

StudentDetail.java

@Table(name="studentpersonaldetails")
@Entity
public class StudentDetail {
@Id
@Column(name="emailid")
String emailId;
@Column(name="firstname")
String firstName;
@Column(name="lastname")
String lastName;
@Column(name="mobilenumber")
String mobileNumber;
String address;
String batch;
String course;
String gender;
String year;
Paramaterised constructor, getters-setters &  toString method 
}

StudentController.java

@GetMapping("/getpersonaldetails/{emailId}")
public StudentDetail getPersonalDetails(@PathVariable String emailId)
{
emailId = emailId.substring(1);
return studentService.getPersonalDetails(emailId);      
}

StudentService.java

public StudentDetail getPersonalDetails(String emailId) {   
return studentDao.getPersonalDetails(emailId);
}

StudentDAO.java

@Query(value = "SELECT * FROM studentpersonaldetails WHERE emailId=?1", nativeQuery = true)
StudentDetail getPersonalDetails(String emailId);

错误

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [com.cdac.hms.model.StudentDetail]

您可以创建一个StudentDetail类型的新对象并使用中的结果构建它吗。然后返回

var results = studentService.getPersonalDetails(emailId); 
StudentDetail sd = new StudentDetail(results);
return sd; 

查询不正确,必须更改参数。

试试这个代码:

@Query(value = "SELECT * FROM studentpersonaldetails WHERE emailId= :emailId", nativeQuery = true)
StudentDetail getPersonalDetails(String emailId);

您不需要本机查询就可以完成这个简单的操作。以下是存储库接口的findStudentByEmailId示例。

@Query("SELECT student FROM studentpersonaldetails student WHERE student.emailId= :emailId")
StudentDetail findStudentByEmailId(@Param("emailId") String emailId);

注意:我添加了param名称,并在Query中使用了它。

据此:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-创建

您可以:StudentDAO.java

public interface StudentDAO extends Repository<StudentDetail, String> {
Optional<StudentDetail> findByEmailId(String emailId);
}

你也可以使用普通的StudentDetail而不是可选的

最新更新