I have a jpa entity like this:
@Entity
public class RectangleEntity
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private Integer x;
@Column
private Integer y;
@Column
@Convert(converter = ColorConverter.class)
private Color color;
}
And my ColorConverter is like this:
@Converter
public class ColorConverter implements AttributeConverter<Color, String[]> {
@Override
public String[] convertToDatabaseColumn(Color color) {
switch(color) {
case REDISH : return {"red","pink"};
case GREENISH: return {"green","cyan"};
}
return sb.toString();
}
@Override
public Color convertToEntityAttribute(String... colorStrings) {
if(colorStrings == null || colorStrings.length != 1) {
return null;
}
if(colorStrings[0].equals("red") || colorStrings[0].equals("pink")) {
return REDISH;
} else if(colorStrings[0].equals("green") || colorStrings[0].equals("cyan")) {
return GREENISH;
}
}
}
The thing is that I want to use my column value in a query like this:
Expression<String> colorPath = root.get("color");
Predicate predicate = requestStatePath.in(Color.REDISH);
Predicate[] predicatesArr = predicates.toArray(new Predicate[predicates.size()]);
criteriaQuery.where(predicatesArr);
CriteriaQuery<RectangleEntity> criteriaQuery = criteriaBuilder.createQuery(RectangleEntity.class);
TypedQuery<RectangleEntity> query = this.em.createQuery(criteriaQuery);
query.getResultList();
I want this query select all my records which their color field is pink or red as they are REDISH
.
Is it possible?