constante de la valeur d'enum en HQL
J'ai un travail de recherche, ce que j'ai besoin de modifier par filtrage avec la constante de valeur d'enum.
Maintenant, il semble de cette façon:
public static final String venueQuery =
"select distinct v from package.Venue v "
+ "<some joins here> "
+ "WHERE v.venueType = package.enums.VenueType.VOUCHER_PROVIDER ";
De la modification des données de cette façon, les causes
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token
Définition de la colonne est comme ceci:
@Enumerated(EnumType.STRING)
@Column(name = "venue_type")
private VenueType venueType;
Enum définition recherche de cette façon:
public enum VenueType {
RESTAURANT, BAR, CAFE, FUN_CLUB, VOUCHER_PROVIDER
}
Je suis sûr que d'autres parties de la requête fonctionne très bien, car après l'avoir supprimé, aucune exception n'est levée.
Sont là des astuces pour le réglage de la constante de la valeur d'enum dans la requête HQL?
- Avez-vous essayé une requête paramétrée? Et en passant une valeur d'enum comme valeur du paramètre?
- oui, en passant va bien. Mais j'utilise venueQuery pour la base de la requête et de l'étendre avec COMMANDE supplémentaire PAR ou OÙ les cause des chaînes de caractères. Je tiens donc à éviter l'ajout de paramètre pour l'ensemble des méthodes
Vous devez vous connecter pour publier un commentaire.
Le moyen préféré serait d'aller sur l'ajout de paramètres de la requête et de passer l'enum exemple que la valeur du paramètre, mais si vous n'avez pas (ou ne peut pas) faire une requête paramétrée, vous pouvez toujours le faire avec
String
concaténation comme ceci:Si vous voulez un moment de la compilation de la constante de requête
String
:DebitCredit.DEBIT.ordinal()
. Si ils sont de la chaîne de valeurs, aussi essayez de donner une passantDebitCredit.DEBIT.name()
.Assurez-vous que les noms de colonne de table & nouveaux de l'instanciation de la classe des noms de propriétés sont les mêmes.