'How to use JPA criteria API for search enum list

I'm trying to use JPA criteria API for filter data. but I can't find solution for create predicate for that.

entity is:

@Entity
@Table(name = "test_entity")
public class TestEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id;
    private String title;
    private Integer enabled;

    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = LanguageEnum.class, fetch = FetchType.EAGER)
    private List<LanguageEnum> languages;

    //getter and setter

}

Enum is:

public enum LanguageEnum {
    ENGLISH, PERSIAN, TURKISH, DUTCH, 
}

I have 2 tables :

TEST_ENTITY ( id NUMBER, title varchar, enabled NUMBER )
TESTENTITY_LANGUAGES ( TESTENTITY_ID NUMBER, LANGUAGES varchar )

and my code:

List<Predicate> predicateList = new ArrayList<Predicate>();

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<TestEntity> criteriaQuery = builder.createQuery(TestEntity.class);
Root<TestEntity> root = criteriaQuery.from(TestEntity.class);

List<LanguageEnum> languages = testEntityCriteria.getLanguages();
if ( languages != null) {
    Predicate languagePredicate = builder.equal(root.<LanguageEnum>get(TestEntity_.languages), languages);
    predicateList.add(languagePredicate);
}

criteriaQuery.select(root).where(predicateList.toArray(new Predicate[]{}));


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source