Dans mon projet, j'utilise JPA 2.0 avec une implémentation eclipselink, un problème suivant:
J'ai défini l'entité avec la colonne booléenne:
@Entity
public User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="USR_ID")
private Short id;
@Column(name="USR_NAME")
private String name;
@Column(name="USR_ACTIVE")
private boolean active;
.......
}
Je veux créer une requête qui retournera tous les utilisateurs actifs, quelque chose comme ceci:
sélectionnez u dans Utilisateur u où u.active = TRUE;
Mais si j'utilise cette requête, j'ai une exception: le booléen ne peut pas être converti en Short (la colonne de la base de données est stockée sous le nom de smallint). Existe-t-il une manière correcte d'écrire cette requête?
Merci
Utilisez le formulaire suivant:
SELECT e FROM Employee e WHERE e.active = TRUE
Voir la documentation pour plus d'informations:
J'ai aussi eu ce problème (PostgreSQL + Eclipselink) et je l'ai obtenu avec les annotations @TypeConverter
et @Convert
.
@Entity
@TypeConverter(name = "booleanToInteger", dataType = Integer.class)
public User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="USR_ID")
private Short id;
@Column(name="USR_NAME")
private String name;
@Column(name="USR_ACTIVE")
@Convert("booleanToInteger")
private boolean active;
.......
}
SELECT e FROM Employee e WHERE e.active = TRUE
dans la requête ci-dessus, comment passer TRUE/FALSE en tant que paramètre utilisateur? lorsque j'essaie ci-dessous, ne renvoie pas les valeurs définies par l'utilisateur (TRUE/FALSE).
voici la requête nommée
SELECT e FROM Employee e WHERE e.active = :inputValue
ici j'appelle la requête de nom ci-dessus
Query getEmployeesByState= entityManager.createNamedQuery("above query name");
getEmployeesByState.setParameter("active", Boolean.FALSE);
Vous pouvez écrire une requête comme:
@Query ("SELECT u de l'utilisateur u ordre par u.active");
Il affichera les utilisateurs inactifs en premier. Si vous voulez voir un utilisateur actif, utilisez d'abord comme:
@Query ("SÉLECTIONNER U de l'utilisateur u ordre par u.active desc");
J'utilise EclipseLink en tant que fournisseur JPA et base de données MySQL. Avec cette configuration, utiliser 1 pour true et 0 pour false fonctionne.
Vous pouvez utiliser @TypeConverter (dataType = Integer.class)