簡體   English   中英

Spring 引導 Jpa 規范 Set Enums IN Set Enums

[英]Spring Boot Jpa specification Set Enums IN Set Enums

嗨,我想使用規范按類型過濾餐廳,但出現錯誤:

參數值 [SUSHI] 與預期類型不匹配 [java.util.Set (n/a)]

如何將列表枚舉與列表枚舉進行比較? :/

我的規范文件:

if(Objects.nonNull(category)){
    predicates.add(root.get(Restaurant_.category).in(category));
}

餐廳 model:

@ElementCollection(targetClass = RestaurantCategory.class)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "restaurant_category")
private Set<RestaurantCategory> category;

餐廳類別:

public enum RestaurantCategory {
    STREET_FOOD, SUSHI, PIZZA, BURGER
}

有同樣的問題,這個問題幫助了我。

就我而言,我想按國家搜索我的佣金。 這是我如何解決我的問題的。

領域:

@Entity
@Table(name = "commission")
data class Commission(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long? = 0,

    @ElementCollection(fetch = FetchType.EAGER)
    @Enumerated(EnumType.STRING)
    var countries: MutableSet<CountryCode>? = null,

    @get: NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "type", nullable = false)
    var type: CommissionType? = null
) 

規范代碼( @see findByCountries 部分):

object CommissionSpecifications {
fun buildQuery(request: SearchCommissionRequest): Specification<Commission> {

    var query = Specification.where<Commission>(distinct())

    request.type?.also { query = query?.and(findByType(it)) }
    request.countries?.also { if (it.isNotEmpty()) query = query?.and(findByCountries(it)) }

    return query!!
}

private fun findByType(type: CommissionType): Specification<Commission> =
    Specification { root, _, cb -> cb.equal(root.get<Commission>(Commission::type.name), type) }

private fun findByCountries(countries: Set<CountryCode>): Specification<Commission> =
    Specification { root, _, _ ->
        root.join<Commission, Set<CountryCode>>(Commission::countries.name).`in`(countries)
    }

private fun distinct(): Specification<Commission?> {
    return Specification { root: Root<Commission?>?, query: CriteriaQuery<*>, cb: CriteriaBuilder? ->
        query.distinct(true)
        null
    }
}

}

我必須加入。 謂詞.add(root.join(Restaurant_.category).in(category));

也可以;)

暫無
暫無

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

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