[英]TypeMismatchException on fetching the table data by Hibernate Session.get() method
在應用程序中,將數據庫表CUSTOMERS定義為:
create table CUSTOMERS (
ID varchar(10),
CODE varchar(10),
CID varchar(10),
SID varchar(10),
FNAME varchar(50),
LNAME varchar(50),
constraint PK_CUSTOMERS primary key (ID, CODE, CID, SID)
);
並創建實體類以將數據填充為
@Embeddable
public class CustKey implements Serializable , Cloneable{
@Transient
private static final long serialVersionUID = 1L;
@Column(name = "ID", nullable = false)
private String id;
@Column(name = "CODE", nullable = false)
private String code;
@Column(name = "CID", nullable = false)
private String cid;
@Column(name = "SID", nullable = false)
private String sid;
public boolean equals(Object o){
return id.equals(o.getId()) && ...;
}
public int hashcode(){
return id.hashcode() & ...;
}
}
@Entity
@Table(name = "CUSTOMERS")
public class CustProfileWrapper implements Serializable,Cloneable {
@Transient
private static final long serialVersionUID = 1L;
@EmbeddedId
private CustKey custKey;
@Column(name = "FNAME")
private String fname;
@Column(name = "LNAME")
private String lname;
}
記錄的填充沒有問題。
但是由於代碼/項目的一些重寫,實體類被移動到其他項目(但保持與以前相同的 package 名稱)。 但是在通過 Hibernate Session 獲取數據時
Object object = session.get(CustProfileWrapper.class, custProfileWrapper.getCustKey(), LockMode.NONE);
得到錯誤
org.hibernate.TypeMismatchException: Provided id of the wrong type for class CustProfileWrapper. Expected: class com.db.CustProfileWrapper, got class com.db.CustProfileWrapper
但是,當使用參數化查詢作為
SQLQuery query = session.createSQLQuery("SELECT * FROM CUSTOMERS WHERE ID = ? "
+ " AND CODE = ? AND CID = ? AND SID = ? ");
query.addEntity(CustProfileWrapper.class);
query.setParameter(0, "101");
...
object = query.list();
但是在使用查詢時它是一個低級代碼,我們應該使用更好的方法,比如 get() 方法。
任何幫助/提示將不勝感激!
經過這么多調查,找到了罪魁禍首spring-boot-devtools依賴項,如下所述:
在我的 Springboot 項目中添加對 spring-boot-devtools 的依賴項后,我遇到了這個問題。 我刪除了依賴項,問題就消失了。 在這一點上我最好的猜測是 spring-boot-devtools 引入了一個新的類加載器,並且在某些線程沒有使用新類加載器的某些情況下,這會導致不同類加載器之間的 class 轉換問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.