IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

ElementCollection et isEmpty : une alternative ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut ElementCollection et isEmpty : une alternative ?
    Salut à tous,
    Je cherche une alternative à un problème d'Hibernate concernant l'utilisation du prédicat isEmpty sur les membres annotés avec ElementCollection (voir https://hibernate.onjira.com/browse/HHH-6686).

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Flow> criteriaQuery = criteriaBuilder
    		.createQuery(Flow.class);
    Root<Flow> root = criteriaQuery.from(Flow.class);
    criteriaQuery.select(root.alias("flow"));
    
    List<Predicate> predicates = new ArrayList<Predicate>();
    predicates.add(criteriaBuilder.equal(
    		root.get("componentTypeReference"),
    		flow.getComponentTypeReference()));
    predicates.add(criteriaBuilder.equal(
    		root.<ProductionCategory> get("productionCategory"),
    		flow.getProductionCategory()));
    predicates.add(criteriaBuilder.equal(root.<Device> get("device"),
    		flow.getDevice()));
    Set<Date> optimalPrintingDates = flow.getOptimalPrintingDates();
    if (optimalPrintingDates != null) {
    	Path<Set<Date>> optimalPrintingDatesPath = root
    			.<Set<Date>> get("optimalPrintingDates");
    	if (optimalPrintingDates.isEmpty()) {
    		predicates.add(criteriaBuilder
    				.isEmpty(optimalPrintingDatesPath));
    	} else {
    		predicates.add(criteriaBuilder.equal(optimalPrintingDatesPath,
    				flow.getOptimalPrintingDates()));
    	}
    }
    Set<Priority> priorities = flow.getPriorities();
    if (priorities != null) {
    	Path<Set<Priority>> prioritiesPath = root
    			.<Set<Priority>> get("priorities");
    	if (priorities.isEmpty()) {
    		predicates.add(criteriaBuilder.isEmpty(prioritiesPath));
    	} else {
    		predicates.add(criteriaBuilder.equal(prioritiesPath,
    				flow.getPriorities()));
    	}
    }
    
    criteriaQuery.where(predicates.toArray(new Predicate[0]));
    TypedQuery<Flow> singleFlowQuery = entityManager
    		.createQuery(criteriaQuery);
    List<Flow> foundFlows = singleFlowQuery.getResultList();
    if (foundFlows == null || foundFlows.isEmpty()) {
    	return null;
    } else if (foundFlows.size() > 1) {
    	throw new NonUniqueResultException("Le flux n'est pas unique : "
    			+ foundFlows.size());
    } else {
    	return foundFlows.get(0);
    }
    Je cherche donc à remplacer les isEmpty par un équivalent. J'ai tenté avec join et notExists, mais je n'ai pas réussi.

    Merci pour toute aide !

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Bon, j'ai une solution triviale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Expression<Integer> dateCount = criteriaBuilder
    		.size(optimalPrintingDatesPath);
    predicates.add(criteriaBuilder.equal(dateCount, 0));
    Eh oui, une collection vide est une collection avec 0 éléments...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. une alternative à Enterprise Manager ???
    Par Ekimasu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/08/2005, 15h35
  2. Exite-t-il une alternative à SELECT ... INTO?
    Par Ditch dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/04/2005, 09h52
  3. Une alternative à XCloseDisplay(Display *dpy) ?
    Par Michaël dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 10/02/2005, 09h32
  4. Une alternative a ... ?
    Par Crapouille dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/08/2004, 13h51
  5. Une alternative à glut
    Par davcha dans le forum GLUT
    Réponses: 3
    Dernier message: 11/07/2004, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo