我從來沒有真正使用Java枚舉類之前的常量值,我通常在過去使用「公共最終」的方法。我已經開始使用枚舉了,並且我重寫了toString()方法返回與枚舉名稱不同的值。Java枚舉重寫toString()
我有一些JPA代碼,我在其中創建一個具有命名參數的TypedQuery,其中一個是枚舉值的字符串表示形式。如果我只是使用Status.ACTIVE設置參數,我會得到正確的「A」值,但會拋出一個異常,因爲它的類型實際上是Status而不是String。它只有在我顯式調用toString()方法時纔有效。我認爲只要重寫toString()方法就會返回一個String類型,不管類的類型是什麼。
這是枚舉:
public enum Status {
ACTIVE ("A"),
PENDING ("P"),
FINISHED ("F");
private final String value;
Status(String value) {
this.value = value;
}
public String toString() {
return value;
}
};
這是TypedQuery:
TypedQuery<MechanicTimeEvent> query = entityManager().createQuery("SELECT o FROM MechanicTimeEvent o WHERE o.id.mechanicNumber = :mechanicNumber AND o.id.status = :status", MechanicTimeEvent.class);
query.setParameter("mechanicNumber", mechanicNumber);
query.setParameter("status", Status.ACTIVE.toString());
可以添加該字段到問題的映射嗎? – Augusto
如果你正在尋找一個更簡潔的方式來寫它,'query.setParameter(「status」,Status.ACTIVE +「」);'將工作。 – Eric
是你的'@ Entity'類型爲'Status'的字段,是否用'@Enumerated(EnumType.STRING)'註解?如果是這樣,你應該能夠在查詢中使用枚舉就好了。 –