| 

.NET C# Java Javascript Exception

DatumsFeld ohne Zeit-Angabe?

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


DatumsFeld ohne Zeit-Angabe?

hage - 21.02.2008 16:47
Hallo zusammen,

habe heute angefangen Grails (1.0.1) zu evaluieren indem ich ein kleines Beispiel-Projekt aufsetze und bin direkt auf ein Problem gestossen dass ich auch nach 1-2h nicht gelöst kriege.
Ich schaffe es nicht, ein Datumsfeld in einer Domain-Klasse so einzurichten, dass es zum einen in der DB als "DATE" Feld (sprich in MySQL: keine Zeitangabe) statt DATETIME eingerichtet wird und zum anderen über den DatePicker editierbar ist.

class DienstTag {
	java.sql.Date tag
	DienstHabender dienstHabender
	String kommentar
}

Die Klasse "DienstHabender" habe ich mal weggelassen, da Sie für dieses Problem unwichtig ist.

Für das Feld "tag" habe ich java.sql.Date gewählt, da es die Zeitfelder ausblendet und das bei meiner bisherigen Arbeit mit Hibernate immer ohne weiteres geklappt hat.

Nun kann ich allerdings keinen Eintrag von DienstTag anlegen, egal ob über einen DatePicker oder über ein TextFeld.

Failed to convert property value of type [java.util.GregorianCalendar] to required type [java.sql.Date] for property tag; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.util.GregorianCalendar] to required type [java.sql.Date] for property tag: no matching editors or conversion strategy found

bzw.

Failed to convert property value of type [java.lang.String] to required type [java.sql.Date] for property tag; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.sql.Date] for property tag: no matching editors or conversion strategy found

Was macht man da am besten? Das Feld doch als java.util.Date statt java.sql.Date einrichten und die precision des DatePickers auf "day" setzen? Wie sorge ich dann dafür dass in der Tabelle der richtige Typ verwendet wird?

Wäre toll wenn da jemand was wüsste...

Ciao,
Hage


Re: DatumsFeld ohne Zeit-Angabe?

hage - 22.02.2008 02:34
So, nach langem hin- und her habe ich das Problem nun unter Kontrolle:

class DienstTagNew {
	java.sql.Date id
	DienstHabender dienstHabender
	String kommentar

    static mapping =  {
    	version false
    	id generator:'assigned', params:[type:'date']
		columns { id column:'tag', type:'date'} 
    }
}
(mag sein dass nicht alle Angaben im mapping nötig sind, hab halt viel hin- und her probiert)

Das Hauptproblem war das Gedöns mit dem "assigned" Generator, damit kommt Grails per default überhaupt nicht klar, da immer versucht wird ein UPDATE statement zu fahren statt ein INSERT, obwohl es das Entity in der DB noch garnicht gibts.

Das Problem scheinen andere auch schon entdeckt zu haben, unter
[jira.codehaus.org]
gibt es ein "Explicit Insert", dass die neue Domain-Class Methode "insert()" bereitstellt.

Ich musste also im Grunde nur in meinem Controller in "save()"
if(!dienstTagNew.hasErrors() && dienstTagNew.save()) {
durch
if(!dienstTagNew.hasErrors() && dienstTagNew.insert()) {
ersetzen


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "DatumsFeld ohne Zeit-Angabe?" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.