'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 |
|---|
