본문 바로가기

Programming!

JPA - @ElementCollection의 'in' 조건

아래와 같은 Entity가 있다고 생각하자

@Entity
@Table(name = "item")
@.....
class Item(
    id: Long? = null,
    attributes: Set<Attribute>
) : AuditingEntity() {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long? = id


    @ElementCollection
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "attribute", joinColumns = [JoinColumn(name = "item_id")])
    @Column(nullable = false, name = "attribute", columnDefinition = "varchar(20) not null comment '아이템속성'")
    var attributes: MutableSet<Attribute> = attributes.toMutableSet()
        protected set

ElementCollection으로 지정된 Enum

enum class Attribute(
    val description: String
) {
    A("A야"),
    B("B야"),
    C("C야")
}

해당 Entity 에 대한 조회시 attributes가 'A', 'C'인 것들을 찾을 경우 다음과 같다. - QueryDSL

.and(...
.and( item.attributes.any().`in`(listOf(Attribute.A, Attribute.C)) )
.and(...