복붙노트

[SPRING] Hibernate Criteria API에서 enum 메소드에 대한 질의

SPRING

Hibernate Criteria API에서 enum 메소드에 대한 질의

@Enumerated 필드가 매핑 된 @Entity가 있습니다.

@Entity
@Table
public class Device implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    @Enumerated(EnumType.STRING)
    private DeviceType typeOfDevice;

    [....]

}

DeviceType은 일반적인 java 5 enum입니다.

public enum DeviceType {
  MOBILE(true), EMAIL(false);
  private final boolean fubar;

  private DeviceType(boolean fubar) {
    this.fubar= fubar;
  }

  public boolean isFubar() {
    return fubar;
  }
}

typeOfDevice.isFubar () == true 인 장치 엔터티를 쿼리하려면 어떻게해야합니까?

return factory.getCurrentSession().createCriteria(Device.class).
       add(Restrictions.eq("typeOfDevice.isFubar", true)).list();

다음과 같은 일을하지 못하고 있습니다.

return factory.getCurrentSession().createCriteria(Device.class).
       createCriteria("typeOfDevice").add(Restrictions.eq("fubar", true)).list();

해결법

  1. ==============================

    1.귀하의 문제에 대한 해결책이

    귀하의 문제에 대한 해결책이

    Criteria criteria = factory.getCurrentSession().createCriteria(Device.class);
    Disjunction or = Restrictions.disjunction();
    
    for (DeviceType type : DeviceType.values()) {
        if (type.isFubar()) {
            or.add(Restrictions.eq("typeOfDevice", type));
        }
    }
    
    criteria.add(or);
    
    return criteria;
    

    typeOfDevice.fubar = true 대신 어디서든 (typeOfDevice = Mobile 또는 typeOfDevice = OtherFubar 또는 typeOfDevice = OtherOtherFubar) 행을 따라 접근하고 있습니다. 나는 이것이 당신이 원래 찍었던 한 줄짜리 줄이 아니라는 것을 알고 있습니다. 그러나 나는 묻는 질문에 대답한다고 생각합니다.

  2. ==============================

    2.당신은 그것으로 anotated했습니다

    당신은 그것으로 anotated했습니다

    @Enumerated(EnumType.STRING)
    

    이것은 열거 형의 이름을 저장합니다. 데이터베이스 열에는 '모바일'또는 '이메일'이 있지만 'true'또는 'false'는 포함되지 않습니다. 당신은에 쿼리를 변경할 수 있습니다

     return factory.getCurrentSession().createCriteria(Device.class).
       add(Restrictions.eq("typeOfDevice", DeviceType.MOBILE)).list();
    

    더 믿을만하지 않아?

  3. from https://stackoverflow.com/questions/7388622/querying-on-enums-method-in-hiberate-criteria-api by cc-by-sa and MIT license