# Hibernate und Set-Methode



## satinez (3. Dez 2010)

ciao!

Habe ein kleines Problemchen, ich wusste nicht genau wie ich das ganze nennen soll.
Ich möchte gerne über eine Setter Methode mehrere Werte in einem Feld speichern mittels Hibernate. (MySQL)
Soweit funktioniert auch alles prima.

Jetzt besteht aber das Problem das es irgendwie nicht funzt, wenn ich mehrere Werte einer Setter-Funktion übergebe.


```
DateSetter datse = new DateSetter();
datse.setDates(10,5,2005);
```

Wenn ich aber die Methode abändere und nur einen Wert in das Feld schreibe dann funktioniert es tadellos.


```
DateSetter datse = new DateSetter();
datse.setDates(10);
```

Funktion:

```
public void setDates(int tag, int monat, int jahr) {
		this.tag = tag;
                this.monat = monat;
                this.jahr = jahr;
}
```

Kann das Hibernate nicht, oder muss ich irgendwie was spezielles noch machen?

greet;s satinez


----------



## tfa (3. Dez 2010)

Jeder Getter und Setter behandelt nur einen Wert. Das ist Konvention.
Du kannst doch hier einen Datumstypen verwenden (java.util.Date oder Calendar). Das sollte das Problem lösen.


----------



## satinez (4. Dez 2010)

Mit dem Calendar und dem java.util.Date kenne ich mich ueberhaupt nicht aus.
Ich suche noch ein gutes Tutorial.

Hmmm..also ich nehme an das ist die Konvention von Hibernate?

greet;s satinez


----------



## tfa (4. Dez 2010)

Calendar und Date sind Klassen aus dem Standard API von Java. In Hibernate gibt es Mappings, die die Typen verwenden.
Muss du mal in der Dokumentation suchen.
Das mit den Gettern und Settern ist eine Konvention von Java.


----------



## satinez (4. Dez 2010)

Okey dann werd ich mal im JAVA API Kucken.
Die Getter und Setter sind sicher eine Konvention von Java, aber da kann ich doch auch mehrere Werte übergeben?

greet;s satinez


----------



## maki (4. Dez 2010)

> Die Getter und Setter sind sicher eine Konvention von Java, aber da kann ich doch auch mehrere Werte übergeben?


Nein, weil es gegen die Konvention ist: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.2 Privatsphäre und Sichtbarkeit


----------



## satinez (4. Dez 2010)

Danke.
Okey, aber wie übergebe ich denn mehrere Werte?


greet;s satinez


----------



## maki (4. Dez 2010)

Wie wäre es mit lesen anstatt dieselbe Frage mehrmals zu stellen?


----------



## tfa (4. Dez 2010)

satinez hat gesagt.:


> Danke.
> Okey, aber wie übergebe ich denn mehrere Werte?


Du machst mehrere Getter und Setter. Für jedes Attribut ein Paar.


----------



## satinez (4. Dez 2010)

Ja aber irgendwie verstehe ich das nicht 

Mir ist klar wenn ich 3 Werte übergeben muss, muss ich auch 3 Setter machen, doch wie verbinde ich die dann das sie zu einem Wert werden?


greet;s satinez


----------



## tfa (4. Dez 2010)

Hast du dir Date oder Calendar schon angesehen?

Calendar (Java Platform SE 6)
Date (Java Platform SE 6)

Du kannst dir auch selbst Klassen schreiben, die mehrere Attribute haben.


----------



## satinez (4. Dez 2010)

Jo Danke.
Ich hab mir Calendar angekuckt, das ist genau das was ich brauche.
Das einzige Problem, ich weiss nicht wie ich das in die Datenbank eintragen soll.

Oder besser gesagt, in welchem Format es sein muss, und ich muss später auch damit rechnen können.

Habe einige Tutorials und Dokus angekuckt, jedoch möchte ich nicht so ein Konstrukt in meinem Hauptteil haben.


```
import java.util.GregorianCalendar;

public class Main {
  public static void main(String[] argv) throws Exception {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setLenient(false);
    gc.set(GregorianCalendar.YEAR, 2003);
    gc.set(GregorianCalendar.MONTH, 12);
    gc.set(GregorianCalendar.DATE, 1);

    gc.getTime();

  }
}
```

Eher so, das ich das mit Setter and eine Calendar Klasse übergebe.


greet;s satinez


----------



## tfa (4. Dez 2010)

> ich hab mir Calendar angekuckt, das ist genau das was ich brauche.
> Das einzige Problem, ich weiss nicht wie ich das in die Datenbank eintragen soll.


Da du mit Hibernate arbeitest, ist das kein Problem. Hibernate kann mit Calendar-Objekten umgehen.
Wenn du Annotationen verwendest, einfach ein @Temporal dran schreiben. Der Rest geht automatisch.


----------



## satinez (4. Dez 2010)

Okey da bin ich aber beruhigt 

Ich werde mal Step by Step versuchen das zu realisieren.

1. Soll ich eine neue Klasse erstellen, oder kann ich den Calender in der StarterClasse einbauen, da wo auch die anderen z.B. setFirstName("Fritz"); sind?

2. Macht es Sinn eine eigene Klasse zu schreiben und dann von dieser ein Objekt generieren und dann das Datum setzen?

Ich weiss, dass sind vielleicht einige doofe Fragen aber es ist interessant 


greet;s satinez


----------



## tfa (4. Dez 2010)

Das mit der eigenen Klasse bauen war nur ein Beispiel. Wenn Calendar das ist, was du brauchst, dann nimm ihn einfach.


----------



## satinez (4. Dez 2010)

Ich hab da jetzt sowas gebastelt..


```
GregorianCalendar gc = new GregorianCalendar();
		    gc.setLenient(false);
		    gc.set(GregorianCalendar.YEAR, 2003);
		    gc.set(GregorianCalendar.MONTH, 11);
		    gc.set(GregorianCalendar.DATE, 1);
		    
		    
		    System.out.printf( "%tD ", gc );
```

Ausgabe: 12/01/03

Wie heisst denn dieses Verhalten, wo ich definieren kann wie er mir das Datum Objekt ausgeben soll?

System.out.printf( "%tD ", gc );


greet;s satinez


----------



## satinez (4. Dez 2010)

phuu geschafft 


```
Calendar cal = Calendar.getInstance();
		    cal.setLenient(false);
		    cal.set(GregorianCalendar.YEAR, 2003);
		    cal.set(GregorianCalendar.MONTH, 12 -1);
		    cal.set(GregorianCalendar.DATE, 10);
		    
		    
		    System.out.printf( "%1$te-%1$tm-%1$tY", cal );
```

Ausgabe: 10-12-2003

Wie bekomme ich dies nun in ein MySQL Datenbank Feld?
Ich muss es zuerst in eine Variable speichern oder?

Aber welches Format? ein String?


greet;s satinez


EDIT:

Ich habs jetzt in ein String bekommen



```
Calendar cal = Calendar.getInstance();
		    cal.setLenient(false);
		    cal.set(GregorianCalendar.YEAR, 2003);
		    cal.set(GregorianCalendar.MONTH, 12 -1);
		    cal.set(GregorianCalendar.DATE, 10);
		    
		    
		    // System.out.printf( "%1$te-%1$tm-%1$tY", cal );
		
		    StringWriter sw = new StringWriter();
		    PrintWriter pw = new PrintWriter(sw);
		    pw.printf( "%1$te-%1$tm-%1$tY", cal );
		    String s = sw.toString();
		    
		    System.out.println(s);
```


----------

