我在使用SpringJPA并尝试检索对象列表时遇到了这个问题。
这是我试图检索的类
@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
在MySQL中,Object
类的主键存储为整数,实际上这是Object
@Entity
public class Object {
@Column(name="OBJECTID")
@Id
@JsonProperty("OBJECTID")
private int objectId;
....
所以,没有地方设置一个长...
现在,我只需调用一个服务类。
@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
在何处设置对象ID应为长整型?
6条答案
按热度按时间s5a0g9ez1#
看看你的仓库的定义。它有正确的泛型类型吗?你有整数作为第二个参数吗?恕我直言,这可能是根本原因。请参阅建议的正确版本:
11dmarpk2#
根据@Lubo的回答,在我的例子中,我遇到了String和Long类型之间的兼容性问题,由于我的模型需要一个Long自动生成的id,我不得不更改存储库
至
我的控制器来自
至
yv5phkfx3#
您必须将ID定义为Long数据类型。
还要在存储库界面中进行更改:
oiopk7p54#
得到这个是因为
vs3odd8k5#
不完全确定,但我认为这个Map
使
Object
的ID与termicId
的值(长整型)匹配。mm5n2pyu6#
使用了
将int类型转换为Long类型,因为您将Long类型定义为@Id