我在使用 Spring JPA 并尝试检索对象列表时遇到此问题。
这是我要检索的类
@Entity
@Table(name="OBJECTSTERMIC")
public class TermicObject {
@Id
@Column(name="TERMICID")
private long termicId;
@MapsId
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="OBJECTID",columnDefinition="INTEGER")
private Object object;
@Column(name="CONTECA_RIF")
private int contecaRif;
@Column(name="CONTECA_VAL")
private int contecaVal;
@Column(name="TYPE")
private String type;
//getters and setters
Object
类在 MySQL 上将主键存储为 Integer,这确实是 Object
@Entity
public class Object {
@Column(name="OBJECTID")
@Id
@JsonProperty("OBJECTID")
private int objectId;
....
所以,没有地方设置 Long...
现在,我只需调用一个服务类
@Override
public List<TermicObject> findAll() {
return repository.findAll();
}
并得到这个异常
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TypeMismatchException: Provided id of the wrong type for class it.besmart.db_eipo.persistence.model.Object. Expected: class java.lang.Integer, got class java.lang.Long; nested exception is java.lang.IllegalArgumentException: org.hibernate.TypeMismatchException: Provided id of the wrong type for class it.besmart.db_eipo.persistence.model.Object. Expected: class java.lang.Integer, got class java.lang.Long
在哪里设置Object Id应该是Long?
最佳答案
查看您的存储库的定义。它有正确的泛型类型吗?你有整数作为第二个参数吗?恕我直言,这可能是根本原因。查看建议的正确版本:
@RepositoryRestResource
public interface TermicObjectRepository extends JpaRepository<TermicObject, Integer> {
public Optional<TermicObject> findById(Integer id);
public List<TermicObject> findAll()
}
关于mysql - Spring Data JPA - 为类提供了错误类型的 id。应为 : class java. lang.Integer,得到类 java.lang.Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46960150/