2016-12-26 46 views
0

我正面臨着「無法解析屬性isManager」的Hibernate查詢異常。帶有布爾字段的Spring JPA拋出「無法解析屬性異常」

我有以下java類:

public class Employee implements Serializable { 

@Column(name = "employee_id") 
private Integer employeeId; 

@Column(name = "name") 
private String name; 

@Column(name = "is_manager") 
private boolean manager; 

public Integer getEmployeeId() { 
    return employeeId; 
} 

public void setEmployeeId(Integer employeeId) { 
    this.employeeId = employeeId; 
} 

public String getName(){ 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public boolean isManager(){ 
    return employeeId; 
} 

public void setManager(boolean manager) { 
    this.manager = manager; 
} 

這些是蝕產生setter和getter。當我替換時,

public boolean isManager() { 
    return employeeId; 
} with 

public boolean getManager() { 
    return employeeId; 
} 

錯誤消失。我經歷了很多堆棧溢出示例。但是到處都是這樣,我們不應該以「is」開頭的字段。

請問誰能解釋一下?

謝謝。

+0

請使用BOOLEAN類不是原語,因爲休眠會嘗試保存對象到數據庫布爾是原始的 –

+0

您的代碼是完美的按照JPA規範(尊重java bean namings),所以如果Hibernate需要使用布爾值,那麼在您的JPA提供商上提出問題。 –

+0

嘗試將getter重命名爲'getManager()' 或者您可以將該屬性重命名爲'isManager' - >將getter重命名爲'getIsManager' –

回答

0

感謝您的意見。

我找到了解決方案。當我們將該字段命名爲帶有STS生成的setter和getter的isManager時,默認值爲布爾值,false保存在數據庫中。

字段不應以輔助動詞開頭。根據我的示例:

@Column(name = "is_manager") 
private boolean manager; 

public boolean isManager() { 
    return employeeId; 
} 

public void setManager(boolean manager) { 
    this.manager = manager; 
} 

上面的setter和getter工作正常。我沒有更新DB接口方法中的@param值。

謝謝。

0

Hibernate使用getXxx和setXxx作爲所有變量。所以獲取者isManager變量getter getManager()不可用於休眠。

所以它會得到錯誤。解決問題。

  1. 您可以生成自己的getter和setter爲getManager()& setManager()
  2. 可以使用Boolean對象,而不是原語。

注意:getIsManager對訪問原始布爾類型沒有意義。所以Eclipse爲所有以isXXX作爲getter的基元開始生成getter。

相關問題