Hibernate Criteria .group größer als

Rahmspinat

Aktives Mitglied
Hej Leute,

wie kann ich mit Criteria sagen, das etwas größer sein soll?

ich meine damit nicht sowas wie

Java:
Property.forName("feld").ge(5)

sondern sowas in der art


Java:
Property.zahl(3).ge(5)

ich habe nämlich eine DetachedCriteria, die mir einen bestimmten Wert z.b. 4, 7, 10 etc. liefert.

und nur wenn diese Zahl größer ist als meine Zahl die ich da angeben will, soll der Datensatz berücksichtigt werden.

Hat jemand eine Idee? Ich konnte im Tutorial leider nix finden
 
hmm gar keine Antwort?


dann nehm ich mal an, das keiner weiß was ich meine?

Wenn dem so ist, bitte sagen welche informationen fehlen 🙂
 
wenn du eine DetachedCriteria hast oder was auch immer, und das in eine andere Criteria rein soll,
dann muss das doch irgendeine Art Property oder ähnliches sein, wie baust du das bisher ein, ganz unabhänge von dem ge()?

mit einem fest in Java vorgegeben Wert brauchst du sowas nicht,
Property.zahl(3).ge(5)
==
Property.wasAuchImmer(false)

wenn dann kannst du in Java-Code if (3 >= 5) einbauen, diesen statischen Vergleich muss ja nicht das Criteria machen
 
Hi Slater,

danke für deine Antwort.


Zurzeit mache ich das wie folgt:

Java:
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		Criteria criteria = session.createCriteria(Shop.class, "shop");
		criteria.createCriteria("contact", "contact");
		
		DetachedCriteria emailCount = DetachedCriteria.forClass(Shop.class, "subshop")
		.createCriteria("contact", "subcontact")
		.add(Property.forName("subcontact.emailaddress").eqProperty("contact.emailaddress"))
		.setProjection(Projections.projectionList()
				.add(Property.forName("contact.emailaddress").group())
		);

		criteria.add( 1.ge(emailCount)); //ich weiß dass diese Zeile falsch ist, soll nur zeigen, was ich an dieser stelle sinngemäß erreichen will

Ich schaue also wie oft die E-Mail-Adresse eines shops in der Datenbank steckt. Wenn sie mehr als einmal vorhanden ist, soll der Shop aus der Datenbank geladen werden. Dazu brauch ich das ganze.

Jetzt weiß ich nicht wie ich mit der Criteria API das ganze so formuliert bekomme, das da im prinzip steht if(1 < emailCount). ich möchte das definitiv im Query haben und nicht erst später rausfiltern müssen.
 
1.ge(emailCount)
kannst du auch schreiben als
emailCount.lt(1)
sofern das mit emailCount geht,

wenn nicht hast du ein allgemeines Problem, emailCount irgendwie bei dir reinzubringen,
dazu sage ich erstmal gar nix,
aber mit einer Konstante hat das doch kaum zu tun

edit: jetzt beim weiteren Schauen in der API sehe ich langsam deinen Punkt,
vielleicht brauchst du andere Ausgangspunkte wie

Class Subqueries
public static Criterion ge(Object value, DetachedCriteria dc)

da muss man wohl nur das passende Beispiel finden..
 
Zuletzt bearbeitet von einem Moderator:
Hi Slater,

danke für die weitere Antwort.

Durch deine hilfe kann ich das jetzt machen, was ich machen wollte 🙂

hier der finale Code:

Java:
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		Criteria criteria = session.createCriteria(Shop.class, "shop");
		criteria.createCriteria("contact", "contact");
		
		DetachedCriteria emailCount = DetachedCriteria.forClass(Shop.class, "subshop")
		.createCriteria("contact", "subcontact")
		.add(Property.forName("subcontact.emailaddress").eqProperty("contact.emailaddress"))
		.add(Property.forName("subcontact.emailaddress").ne(""))
		.setProjection(Projections.projectionList()
				.add(Property.forName("subcontact.emailaddress").count())
		);
		criteria.add(Subqueries.le(new Long(2), emailCount)); //Hier wird gesagt dass der emailcount größer gleich zwei sein darf


Danke schön 🙂
 

Neue Themen


Zurück
Oben