2010-11-29 6 views
1

In einem einfachen Szenario "Abstimmung nach oben/nach unten abstimmen" möchte ich die Gesamtzahl der Aufwärtssummen zusammenfassen.Wie erhalten Sie Summe (boolean) als Integer in Hibernate Kriterien Abfrage?

criteria.add(Restrictions.eq("vote" , Boolean.TRUE)); 
criteria.setProjection(Projections.rowCount()); 

Die generierte SQL ist sum(this_.vote) as y1_ und korrekten Summenwert erzeugt, sondern es als 'boolean' Wert analysiert Hibernate, all 'true' werden ...

Wie es zu lösen? (Wenn ich brauche nicht die 'Stimme' zu ändern, von boolean integer)

Umgebung: Hibernate-3.6.0, jpa2

Vielen Dank!

Antwort

1

Welche DB benutzen Sie? Ich denke, dass Sie möglicherweise den Dialekt ändern müssen, mit dem Hibernate arbeitet.

Lassen Sie Hibernate Tinyint für boolesche Variablen verwenden.

Nicht auf meiner Arbeit copmuter atm - Entschuldigung. Wenn dies die richtige Richtung sein könnte, kehre ich zurück und ich werde später ein Beispiel bekommen.

Dies könnte helfen Ihnen in der Zwischenzeit beginnen: https://forum.hibernate.org/viewtopic.php?f=1&t=1008105

prost

EDIT:

Ok. Da Sie Mysql verwenden, möchten Sie möglicherweise einen vorhandenen MySQL-Dialekt erweitern - z. Standard MySQL5Dialect:

public class MySQL5DialectBooleanAsTinyint extends MySQL5Dialect { 

    public MySQL5DialectBooleanAsTinyint() { 
    super(); 
    registerColumnType(Types.BIT, "tinyint(1)"); 
    } 

} 

Und das ist es. So verwenden Sie die Benutzer-Dialect, Ihre hibernate.cfg entsprechend ändern:

<property name="hibernate.dialect">your.package.structure.dao.MySQL5DialectBooleanAsTinyint</property> 
+0

Hallo, ich bin mit MySQL – smallufo

+0

meine Antwort bearbeitet - bitte überarbeiten und stimmen, wenn es hilfreich ist. – chzbrgla

+0

Danke, es ist sehr hilfreich! – smallufo