Я никогда раньше не использовал классы перечисления 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());
query.setParameter("status", Status.ACTIVE+"");
подойдет. - person Eric   schedule 13.10.2011@Entity
относится к типуStatus
и помечено ли оно@Enumerated(EnumType.STRING)
? Если это так, вы должны иметь возможность использовать перечисления в запросах. - person Tomasz Nurkiewicz   schedule 13.10.2011