簡體   English   中英

枚舉字段上的像休眠標准

[英]Hibernate Like Criteria on Enum field

給定一個休眠實體Foo

@Entity
@Table(name = "foo")
class Foo {
    //ID Field

    @Column(name = "bar", nullable = false)
    @Enumerated(EnumType.STRING)
    private Bar bar;

    //Getters, Setters
}

還有一個枚舉Bar

enum Bar {
    CAT,
    CRADLE,
    SILVER,
    SPOON;
}

我想運行一個查詢,檢查Foo.bar的值是否包含某些String matchString =“ ADL”。

當前,我的DetachedCriteria對象構造為:

DetachedCriteria.forClass(Foo.class)
    .add(Restrictions.like("bar", matchString, MatchMode.ANYWHERE));`

但是會導致java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum調用時java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum

這樣的查詢只有在使用String值而不是序數來持久化枚舉的情況下才有可能-但是即使那樣,我也不希望標准API一定要支持枚舉的like。

您可以查找名稱中包含“ bar”(在Java代碼中)的所有枚舉,然后查詢該集中“ bar”中的所有匹配項,而不是嘗試在數據庫級別執行此類操作。 這類似於https://stackoverflow.com/a/18899529/4248600

Disjunction or = Restrictions.disjunction();
for (BarEnum bar : BarEnum.values()) {
    if (bar.name().contains(matchStr)) {
        or.add(Restrictions.eq("bar", bar));
    }
}
criteria.add(or);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM