How to fetch a random entry with Hibernate

Friday, August 27, 2010 9:32:12 PM

I recently found myself in the situation where I needed Hibernate to query a single, random entry from a table of Picture entities.

There is a simple way. Some DBMS allow to shuffle the result set by bringing the rows into a random order. For instance, in MySQL it is possible to use a query like this:

SELECT id FROM picture ORDER BY rand() LIMIT 1;

Since Hibernate delegates unknown function calls to the underlying DMBS, rand() could be used in a HSQL query as well:

q.createQuery("FROM picture ORDER BY rand()").setMaxResults(1);

However this query would require MySQL, so we would sacrifice the benefit of Hibernate acting as an abstraction layer to the underlying database. HSQL on the other hand does not offer a similar function.

A solution is to use the pagination technique. First we count the number of entries, and then select a random entry using setFirstResult(). With Hibernate Criteria, it would look something like this:

Criterion restriction = yourRestrictions;
Object result = null;  // will later contain a random entity
Criteria crit = session.createCriteria(Picture.class);
crit.add(restriction);
crit.setProjection(Projections.rowCount());
int count = ((Number) crit.uniqueResult()).intValue();
if (0 != count) {
  int index = new Random().nextInt(count);
  crit = session.createCriteria(Picture.class);
  crit.add(restriction);
  result = crit.setFirstResult(index).setMaxResults(1).uniqueResult();
}

restriction contains further restrictions to the result set (like only pictures that have been published). At the end, result contains a random single entry from the Picture entity, or null if the result set was empty.

Written by Shred in Softwaretechnik, Javano comments

Bloß nicht auffallen!

Thursday, August 12, 2010 12:39:38 AM

Es ist schon krank... Politik, Datenschützer und Presse laufen vereint gegen Google Street View Sturm. Sie verunsichern die Bürger, schüren Angst vor Terroristen und Einbrechern, und raten allen Ernstes dazu, das eigene Haus von Google unkenntlich machen zu lassen, um nur nicht aufzufallen.

Bloß nicht auffallen!

Dabei ist das, was Google mit Street View zeigt, in Deutschland durch die Panoramafreiheit gedeckt. Allerdings legt hier die Politik in ihrer Google-Hysterie bereits die Axt an, ungeachtet von Kollateralschäden.

Dass der Staat nächstes Jahr noch viel tiefer in unsere Privatsphäre eindringen wird, ohne dass wir eine Widerspruchsmöglichkeit hätten, scheint dagegen vollkommen in Ordnung zu sein. Und das, obwohl es gegen den Zensus 2011 sogar verfassungsrechtliche Bedenken gibt.

Foto-Original von Thomas Pusch, CC-BY-SA.

Written by Shred in Pirat, Gesellschaftno comments

Die CSU und die Sperrklausel des Grauens

Friday, August 6, 2010 6:36:11 PM

Wie funktioniert das eigentlich mit der CDU und CSU? Wie kann es sein, dass eine der beiden Parteien nicht auf dem Stimmzettel zu finden ist, sie dann aber doch gemeinsam im Koalitionsboot sitzen? Auch wenn man nicht immer diesen Eindruck hat: Es handelt sich tatsächlich um zwei eigenständige Parteien. Die CDU kann man allerdings nicht in Bayern wählen, die CSU nicht außerhalb.

Beide Parteien müssen (wie jede andere Partei in Deutschland auch) bei einer Bundestagswahl jeweils die fünf-Prozent-Hürde knacken, um in den Bundestag einziehen zu dürfen. Für die CSU haben dafür bisher alleine die Stimmen in Bayern ausgereicht, um die Partei deutschlandweit komfortabel über die 5% zu holen. Aber wie komfortabel ist die Stimmenzahl wirklich, oder anders gefragt: Wie schlecht müsste die CSU in Bayern abschneiden, um bundesweit an der Sperrklausel zu scheitern? Wagen wir also ein Gedankenexperiment und fragen uns, wie viele gültige Wählerstimmen bei der Bundestagswahl 2009 in Bayern notwendig gewesen wären, um die CSU bundesweit gerade noch auf die 5% kommen zu lassen.

Erst einmal die Fakten. In dem offiziellen Wahlergebnis heißt es, von bundesweit insgesamt 43.371.190 gültigen Wählerstimmen entfielen auf die CSU 2.830.238 Zweitstimmen, was 6,5% ausmacht. In Bayern selbst brachte es die Partei bei insgesamt 6.720.532 gültigen Wählerstimmen damit auf 42,5%.

Bei 43.371.190 gültigen Wählerstimmen bundesweit braucht eine Partei mindestens 2.168.560 Stimmen, um die fünf-Prozent-Hürde zu nehmen — was die CSU in Bayern alleine aufbringen müsste. Bei den dortigen 6.720.532 gültigen Wählerstimmen wären das mindestens 32,3%, die die CSU im eigenen Land erreichen müsste, um in den Bundestag ziehen zu können. Natürlich ist das keine statische Grenze. Sie hängt von der Zahl der gültigen Wählerstimmen bundesweit und in Bayern ab, und damit auch direkt von der Wahlbeteiligung.

Mit diesen Zahlen im Hinterkopf ist es gut zu verstehen, warum bei der CSU derzeit die Nerven blank liegen, nachdem eine unveröffentlichte Umfrage ergab, dass sie derzeit nur noch auf rund 38% der Stimmen käme. Wenn sich dieser Abwärtstrend fortsetzt, wird die nächste Bundestagswahl erstmalig eine Zitterpartie für die Christsozialen. Und damit auch für die CDU, denn scheitert die CSU an der fünf-Prozent-Hürde, fehlen der Union schlagartig ebendiese Prozentpunkte.

Die Schuld sieht die CSU in der mieserablen Koalitionsarbeit und darin, dass die große Schwester den rechten Flügel zu stark vernachlässigt. Sollte die Stimmenerosion so weitergehen, dürfte es die CSU zu einem drastischen Schritt zwingen, um sich zu retten: das Aufkündigen der Union und die Umorganisation in eine eigenständige, stärker rechtsorientierte und bundesweit wählbare Partei. Sie würde das Vakuum rechts der Union füllen und dürfte der CDU einige Stimmen kosten. Stehen wir also vor einer weiteren Zersplitterung einer ehemaligen Volkspartei, so wie es die SPD mit den Linken erfuhr?

Written by Shred in Pirat1 comment

Google Earth und Fedora 13

Friday, August 6, 2010 1:51:53 AM

Und wieder einmal beschäftige ich mich mit meinem Lieblingsthema, der Installation von Google Earth auf einem Fedora-System.

Mit der Version 5.2 bringt Google zwar ein paar nette neue Features, die Installation ist auf einem aktuellen Linux aber weiterhin nicht ohne ein paar zusätzliche Handgriffe erledigt.

In diesem Artikel beschreibe ich, wie man Google Earth unter Fedora 13 vernünftig ans Laufen kriegt.

Flattr

Written by Shred in Fedoradono comments

Lenovo ThinkPad X100e und Fedora 13 - Teil 4

Tuesday, August 3, 2010 11:43:18 PM

Willkommen zum ungeplanten vierten Teil des Dreiteilers, wie man Fedora auf dem Lenovo ThinkPad X100e installiert. ;-)

Ich beschreibe diesmal, wie man mit laptop-mode-tools weitere Stromsparmaßnahmen vornimmt, um noch ein wenig mehr Laufzeit aus dem Akku herauszukitzeln.

Written by Shred in Fedoradono comments

Lenovo ThinkPad X100e und Fedora 13 - Teil 3

Wednesday, June 16, 2010 12:14:25 AM

Im vorherigen Teil wurde beschrieben, wie Fedora 13 auf dem ThinkPad X100e installiert und die Hardware fast komplett unterstützt wird. In diesem letzten Teil werde ich nun noch etwas Feinschliff am System anlegen.

Flattr

Written by Shred in Fedoradono comments

Lenovo ThinkPad X100e und Fedora 13 - Teil 2

Saturday, June 12, 2010 8:21:06 PM

Nachdem ich im ersten Teil die Hardware des ThinkPad X100e näher betrachtet habe, geht es jetzt ins Eingemachte. In diesem Teil beschreibe ich, wie Fedora 13 auf dem X100e installiert wird. Leider ist es nicht ganz so leicht wie erwartet.

Flattr

Written by Shred in Fedoradono comments

Adobe beendet 64 bit-Flash-Beta

Friday, June 11, 2010 11:12:22 AM

Adobe hat zeitgleich mit dem Sicherheitsupdate für seinen Flash Player den 64 bit-Betatest für Linux aufgekündigt. Wo einst ein 64 bit-Plugin heruntergeladen werden konnte, liest man jetzt nur noch eine Nachricht, dass die Beta beendet wurde und eine 64 bit-Version irgendwann in der Zukunft veröffentlicht wird. Das dazu gehörende Forum wurde kommentarlos geschlossen.

Wer auf einem 64 bit-Linux das Flash-Plugin verwenden möchte, darf also ab jetzt wieder zum guten alten nspluginwrapper greifen.

So allmählich gewinnt HTML5 stark an Attraktivität...

Written by Shred in Linuxno comments

Jetzt auch mit Flattr

Friday, June 11, 2010 1:58:17 AM

Ich habe eben Flattr-Buttons hinzugefügt. Erst mal aber nur, um Erfahrung damit zu sammeln und zu schauen, wie viele Flattrs dadurch überhaupt reinkommen.

Übrigens: Sein Flattr-Konto kann man endlich nicht mehr nur über PayPal aufladen, sondern zum Beispiel per Kreditkarte.

Written by Shred in Websiteno comments

Lenovo ThinkPad X100e und Fedora 13 - Teil 1

Tuesday, June 8, 2010 11:12:39 PM

Mit dem ThinkPad X100e hat Lenovo ein ziemlich attraktives Netbook auf den Markt gebracht, nicht zuletzt wegen des Designs, der Ausstattung und des Preises. Doch wie steht es mit der Linux-Unterstützung? Und lässt sich die einzige wirkliche Schwäche, der stromhungrige Prozessor, auch unter Linux ein wenig lindern?

In diesem ersten Teil beschreibe ich erst einmal die Hardware selbst. Der zweite Teil wird sich mit der Installation von Fedora 13 auf dem System beschäftigen, und im dritten Teil gebe ich dem System noch einen letzten Schliff, Stromsparmaßnahmen inklusive.

Aber schauen wir uns das ThinkPad erst einmal etwas näher an...

Flattr

Written by Shred in Reviews, Fedoradono comments