Ich habe eine JPA-Entität wie folgt aus:Funktioniert jpa AttributeConverter in der Abfrageklausel?
@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;
}
Und mein ColorConverter ist wie folgt:
@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;
}
}
}
Die Sache ist, dass ich so meine Spalte Wert in einer Abfrage verwenden möchten:
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();
Ich möchte diese Abfrage wählen Sie alle meine Datensätze, deren Farbe Feld ist rosa oder rot, wie sie sind REDISH
.
Ist es möglich?
Tanx für Ihre Antwort am Ende. Sie haben Recht mit String []. Das war mein Fehler. Mein Problem besteht nicht darin, den Wert zu speichern, da ich Oracle View verwende. Ich möchte meine Ansicht mit Parameter eines Typs abfragen, der in eine Menge von Werten umgewandelt wird, die als ein 'in'-Wert verwendet werden. Ich habe deine letzte Aussage nicht bekommen. –