# Hibernate mit MySQL Beispiel und Timestamp



## Frank Hahn (2. Nov 2007)

Ich bin absoluter Laie im Bereich Java. Ich möchte eine kleine Datenbank-Anwendung erstellen, um Java näher kennzulernen. Hierzu verwendet meine Datenbank-Anwendung das Hibernate-Framework. Meine Basisklasse sieht etwa wie folgt aus:

public abstract myDBTable implements Serialize {
         private Integer id;
         private Date     erstelldatum;

         public myDBTable {
         }

         public Date getDate {
                   return erstelldatum;
         }

         public void setDate(Date erstelldatum) {
                   this.erstelldatum = erstelldatum;
         }
}

public myExtendedDBTable extends myDBTable {
         private String   name;

         public myExtendedDBTable {
         }

         public String getName {
                   return name;
         } 

         public void getDate(String name) {
                   this.name = name;
         }

}

Fragen:
1. Wenn ich eine Datentabelle mit Date, Time, DateTime oder Timestamp habe wie muss die Klasse aussehen? Wird bzw. kann ich den Wert in Date speichern? 
2. Wer kennt ein kleines Hibernate - Beispiel (Quellcode), die DateTime / Timestamp verwendet?
3. Ich möchte ganz gern auf das erstelldatum nur eine nur Lesefunktion einrichten. Klappt es mit Hibernate, wenn ich myDBTable::setDate auf private setze? Bzw. wie könnte ich dieses sonst lösen?


----------



## SlaterB (2. Nov 2007)

ganz generell:
wenn du mit einem Framework wie Hibernate arbeitest, dass sich Klassen und Objekte darin generisch suchen muss,
dann solltest du dich unbedingt an allgemeine Code Conventions halten:
Klassen groß schreiben! (wie in 99,99% aller Code-Beispiele die du je zu sehen bekommst)



1.
siehe 2.
ja

2.
http://www.java2s.com/Code/Java/Hibernate/CatalogHibernate.htm

hier schein was dabei zu sein:
http://www.java2s.com/Code/Java/Hibernate/ClassHiearchyMappingTablePerConcreteClass.htm
aber nur per Zufall gefunden, für solche absoluten Grundlagen schreibt doch kaum jemand ein Beispiel,
hast du kein Lehrbuch? da steht das millimetergenau erklärt (auch mit Beispielen)

3.
ich denke das klappt, ausprobieren ist nicht verboten


----------



## Guest (2. Nov 2007)

und ein Beispiel mit JPA und Hibernate als JPA-Implementierung
	
	
	
	





```
@MappedSuperclass
public abstract MyDBTable implements Serialize
{
   @Id
   @GeneratedValue
   @Column(name = "ID")
   private Integer id;

   @Temporal(TemporalType.TIMESTAMP)
   @org.hibernate.annotations.Generated(
      org.hibernate.annotations.GenerationTime.INSERT
   )
   @Column(name = "ERSTELLDATUM", nullable = false, updatable = false)
   private Date erstelldatum;

   public MyDBTable()
   {
   }

   public Integer getId()
   {
      return id;
   }

   public Date getDate()
   {
      return erstelldatum;
   }
}

@Entity
@Table(name = "MY_EXTENDED_TABLE")
public MyExtendedDBTable extends MyDBTable
{
   @Column(name = "NAME", nullable = false)
   private String name;

   public MyExtendedDBTable()
   {
      super();
   }

   public String getName()
   {
      return name;
   }

   public void setName(String name)
   {
      this.name = name;
   }
}
```


----------



## Guest (2. Nov 2007)

Ätch, ersetzt das "implements Serialize" durch "implements Serializable" und füge eine serialVersionUID hinzu.


----------



## SnooP (2. Nov 2007)

also zu 3. - würde ich nicht sagen, dass das klappt. Man braucht für das Mapping auch primär die getMethode und an diese würde ich (solltest du Hibernate mit Annotations verwenden) ein:
@Column(insertable=false, updatable=false, name = "SPALTENNAME")
einfügen.

generell: es empfiehlt sich vor dem Nutzen von Hibernate&Co. doch evtl. mal ein wenig Java-Grundlagen zu lernen, selbst wenn man schon programmieren kann (was ich mal hoffe).


----------



## maki (2. Nov 2007)

Ich kann mich Snoops rat nur anschliessen, Java muss man können bevor man sich auf JPA/Hibernate stürzt, was an sich schon sehr komplex ist. IMHO geht da ohne Buch nicht viel, ein paar Beispiele und Tutorials reichen bei weitem nicht aus.

@Gast

```
..
   public Date getDate()
   {
      return erstelldatum;
   }...
```
Date ist ein Mutable


----------



## Guest (2. Nov 2007)

maki hat gesagt.:
			
		

> @Gast
> 
> ```
> ..
> ...


OK, dann ändern wir es mal 

```
..
   public Date getDate()
   {
      if( null == erstelldatum )
      {
         return null;
      }
      return (Date)erstelldatum.clone();
   }...
```


----------

