[Tasktlogger-devel] Verwendung von ORMTool
Brought to you by:
teiniker
From: Szirch M. <Mic...@fh...> - 2006-12-28 13:36:50
|
Hallo Taskloggers, Aus gegebenen Anlass, ich habe eine Anfrage wegen fehlender Werte aus dem ORMTool erhalten m=F6chte ich kurz den Fehler schildern, damit er = anderen vielleicht erspart bleibt: =20 Grunds=E4tzlich: Das ORMTool holt sich mittels einer Technik die sich = Reflection nennt, Informationen =FCber ein Objekt. Das heisst man kann die Namen, Parametertypen ect von = den Methoden des Objectes=20 "auslesen".=20 (vgl. http://de.wikipedia.org/wiki/Reflection) =20 Das im Tasktlogger verwendete ORMTool sucht sich die entsprechenden = setter-Methoden f=FCr die vom Resultset retournierten Werte und ruft diese Methode mit dem = entsprechenden Parameter auf. =20 Bsp: setRemark(String remark); - Methode der TaskDAO-Klasse. Wenn nun = im Resultset der SQL Abfrage eine Spalte mit dem Namen REMARK auftaucht, sucht das = ORMtool den entsprechenden Setter f=FCr diese Spalte - hier entsprechend die Methode setRemark und = ruft die Methode auf und =FCbergibt den Wert aus der Spalte "REMARK" aus = dem Resultset.=20 -> In der =DCbergaberoutinge wird aber der TYP der Variablen und der Typ = des Parameters der setter-Methode auf Gleichheit =FCberpr=FCft. Nur bei = Gleichheit wird die Methode mit dem entsprechenden Parameter aufgerufen. =20 Das hei=DFt wenn man z.B eine Summe =FCber die Datumsdifferenz bilden = m=F6chte und das ORM - Tool verwendet muss man unbeding auf den Typ des Parameters acht geben. =20 z.B SUM(DATEDIFF('mi', startdate, enddate) gibt einen Typ BigDecimal = zur=FCck - man kann also nicht eine Methode mit einem Parameter vom Typ Long aufrufen. =20 D.h: Man muss den Wert in der SQL-Abfrage entsprechend casten: CAST(SUM(DATEDIFF('mi', startdate, enddate)) AS BIGINT) as Difference -> = entspricht dem Typ "Long" =20 lg + guten Rutsch ins neue Jahr Michael =20 |