hibernate - 为类提供了错误类型的 id
问题描述
内部服务器错误","message":"org.hibernate.TypeMismatchException:为类 ca.timisencotech.projectmanagementapis.dto.UserDetails 提供了错误类型的 id。预期:类 ca.timisencotech.projectmanagementapis.dto.UserDetails$UserDetailsId,得到类 ca.timisencotech.projectmanagementapis.dto.UserLoginDetails$UserLoginDetailsId;嵌套异常是 java.lang.IllegalArgumentException:
我的服务实现类:
@Repository
public class UserLoginDetailsDAOImp implements UserLoginDetailsDAO {
@Autowired
UserLoginDetailsRepository userLoginDetailsRepository;
@Autowired
UserDetailsRepository userDetailsRepository;
PersistentException persistentException = new PersistentException();
@SuppressWarnings("unchecked")
@Override
public <T> Container<T> confirmdUserLoginDetails(UserLoginDetail userLoginDetail) {
Container<T> genericObject=null;
UserLoginDetails newUserLoginDetails = new UserLoginDetails();
newUserLoginDetails.setPassword(userLoginDetail.getPassword());
newUserLoginDetails.setUserEmail(userLoginDetail.getUserEmail());
UserLoginDetails findUserLoginDetails = userLoginDetailsRepository.findByEmail(userLoginDetail.getUserEmail());
// UserLoginDetails responseUserDetails = newUserLoginDetails;
//userLoginDetailsRepository.findByEmail("userEmail@gmail.com");
// System.out.println("-->"+responseUserDetails);
try {
if(findUserLoginDetails!=null)
{
UserLoginDetail domainUserLoginDetail = new UserLoginDetail();
domainUserLoginDetail.setLoginTime(findUserLoginDetails.getLoginTime());
domainUserLoginDetail.setPassword(findUserLoginDetails.getPassword());
domainUserLoginDetail.setUserEmail(findUserLoginDetails.getUserEmail());
Application.getLogger().info("addNewUser method in UserDetails DAO Implementation. At this point new user has successful saved to the database. Return userdetails from repo is"+domainUserLoginDetail);
genericObject = (Container<T>) new Container<UserLoginDetail>(domainUserLoginDetail,"Class Object");
}
else
{
genericObject = (Container<T>) new Container<ApiError> (new ApiError("Persistence Error", "Repository returned null"),"Null Object");
}
}
catch (DataAccessException dataAccessException) {
Application.getLogger().info("addNewUser method in UserDetails DAO Implementation. At this point there is an error that has prevented saving new user to the database");
genericObject = (Container<T>) new Container<ApiError> (persistentException.handleDataAccessException((DataAccessException)dataAccessException),"Error Object");
}
return genericObject;
}
}
实体类:
public class UserLoginDetails implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "email",unique = true, nullable = false,length=50)
private String email;
@Column(name = "p", nullable = false,length=20)
private String password;
@Column(name = "l", nullable = false,length=100)
private Timestamp loginTime;
@OneToOne(mappedBy = "u", cascade = CascadeType.ALL,fetch = FetchType.LAZY, optional = false)
private UserDetails userDetails;
public UserLoginDetails(){
}
@Bean
public String getUserEmail(){
return email;
}
@Bean
public void setUserEmail(String userEmail){
this.email = userEmail;
}
@Bean
public UserDetails getUserDetails() {
return userDetails;
}
@Bean
public void setUserDetails(UserDetails userDetails) {
this.userDetails = userDetails;
}
@Bean
public String getPassword(){
return password;
}
@Bean
public void setPassword(String password){
this.password =password;
}
@Bean
public Timestamp getLoginTime(){
return loginTime;
}
@Bean
public void setLoginTime(Timestamp loginTime){
this.loginTime =loginTime;
}
@Override
public String toString()
{
return "{el:"+e+", p:"+p+", l:"+l+"}";
}
public static class UserLoginDetailsId implements Serializable {
private static final long serialVersionUID = -7321416499047242338L;
private String email;
}
}
领域
public class UserLoginDetail implements Serializable{
private static final long serialVersionUID = 1L;
private String email;
private String password;
private Timestamp loginTime;
public UserLoginDetail(){
}
public String getUserEmail(){
return email;
}
public void setUserEmail(String userEmail)
{
this.email = userEmail;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password =password;
}
public Timestamp getLoginTime()
{
return loginTime;
}
public void setLoginTime(Timestamp loginTime)
{
this.loginTime =loginTime;
}
@Override
public String toString()
{
return "{email:"+email+", password:"+password+", loginTime:"+loginTime+"}";
}
public static class UserDetailsId implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7321416499047242338L;
private String email;
}
}
回购类:
public interface UserLoginDetailsRepository extends CrudRepository<UserLoginDetails, Long> {
public UserLoginDetails findByEmail(String email);
//public UserLoginDetails findByEmailAndPassword(String email,String password);
}
{"timestamp":"2019-07-29T18:34:31.856+0000","status":500,"error":"Internal Server Error","message":"org.hibernate.TypeMismatchException: 提供的 id类 ca.timisencotech.projectmanagementapis.dto.UserDetails 的类型错误。预期:类 ca.timisencotech.projectmanagementapis.dto.UserDetails$UserDetailsId,得到类 ca.timisencotech.projectmanagementapis.dto.UserLoginDetails$UserLoginDetailsId;嵌套异常是 java.lang。 IllegalArgumentException: org.hibernate.TypeMismatchException: 为类 ca.timisencotech.projectmanagementapis.dto.UserDetails 提供了错误类型的 id。预期:类 ca.timisencotech.projectmanagementapis.dto.UserDetails$UserDetailsId,得到类 ca.timisencotech.projectmanagementapis.dto .UserLoginDetails$UserLoginDetailsId","路径":"/projectmanagement/confirmLoginDetails"}
解决方案
推荐阅读
- php - 即使设置了密钥,Memcached get 也可能返回“未找到”
- python - 使用 Keras 的神经网络无效维度错误
- powershell - 运行 powershell 脚本以远程获取当前用户 regkey?
- python - 如何并排绘制数据框的图形?
- c# - 跨不同构建器重用构建器步骤
- json - json:不支持的类型:func()
- linux - 在 React 应用程序上激活谷歌分析
- c# - 如何使用 .NET Core 2.1 在 C# 中创建 .xlsx 文件?
- recursion - 避免 Prolog 中的双重递归调用
- c++ - WSASend 会重新发送数据吗?