Tag : hibernate

Par Fabian Piau, le 14 octobre 2011

[JUG] Java EE & CDI vs. Spring

Mercredi soir au JUG nantais, nous avons pu assister à la présentation "Stateful is beautiful" d'Antoine Sabot-Durand.

Expert en Java EE depuis plusieurs années, Antoine nous a donné sa vision sur le paysage Java actuel, en particulier sur Java EE (Enterprise Edition) et l'alternative Spring.

Lire la suite
Par Céline Gilet, le 13 juin 2011

Hibernate Envers : Audit et Suivi de version

Hibernate Envers permet de tracer les modifications sur les objets métiers d'une application mappés en base de données. Le suivi de modifications repose sur le principe de révisions. Chaque sauvegarde (transaction commitée) donne lieu à la création d'une nouvelle version qui regroupe l'ensemble des données modifiées.

Chaque entité auditée va être représentée par deux tables :

  • Une table pour les données actuelles de l'entité
  • Une table d'historique contenant le suivi des modifications de l'entité

L'exemple suivant montre les étapes à suivre pour mettre en place Hibernate Envers.

Lire la suite
Par Sébastien Roul, le 13 octobre 2008

API Hibernate criteria : poser deux critères de recherche sur la même entité dans deux méthodes distinctes

Après pas mal de recherche, j’ai trouvé une solution à une difficulté récurrente :

  • Une méthode X ajoute un critère sur une des tables d’un "join" (exemple order.product.price>0)
  • Une méthode Y ajoute un autre critère sur la même table du "join" (exemple order.product.deleted=false)

Hibernate renvoie une erreur de type QueryException en disant « duplicate association path : product…. » Et nous n’arrivions pas à accéder au premier critère posé par la méthode Y.

C’est finalement une histoire de cast : l’interface criteria n’expose pas la méthode iterateSubCriteria, son implémentation CriteriaImpl, si :

Iterator<Subcriteria> iter = ((CriteriaImpl)crit).iterateSubcriteria();
boolean found = false;
while ( iter.hasNext() ) {
	Subcriteria subcriteria = iter.next();
	if ("product".equalsIgnoreCase(subcriteria.getPath())) {
		subcriteria.add(Expression.eq("deleted", false));
		found=true;
		break;
	}
}
if(!found){
	crit.createCriteria("product").add(Expression.eq("deleted", false));
}