Java Tutorial: Hibernate, MySQL, Annotations
Heute Morgen das Beispiel mit XML veröffentlicht, folgt jetzt das gleiche Beispiel mit Annotations. Diese sind erst seit Java 5 verfügbar und bieten den Vorteil man muss nicht immer zwei Dateien anpassen. Mit Annotations ist es möglich direkt im Java Code festzulegen wie das Objekt später in der Datenbank abgelegt wird.
Bereits in der Übersicht kann man sehen, das die Konfigurationsdatei für das Objekt wegfällt. Die Konfiguration die vorher in der der XML Datei vorgenommen wurde wird jetzt direkt in die Java Klasse implementiert. Natürlich entfällt dann auch die Angabe über die Konfigurationsdatei in der Hibernate Konfiguration.
Aber genug Geschwätz sehen wir uns das Objekt an:
-
// File: Tisch.java
-
-
package obj;
-
-
import java.io.Serializable;
-
import java.text.MessageFormat;
-
import javax.persistence.Entity;
-
import javax.persistence.GeneratedValue;
-
import javax.persistence.GenerationType;
-
import javax.persistence.Id;
-
import javax.persistence.SequenceGenerator;
-
-
-
private static final long serialVersionUID = 1L;
-
-
@Id
-
@GeneratedValue(strategy=GenerationType.IDENTITY)
-
@SequenceGenerator(name = "tisch_gen", sequenceName = "tisch_id_seq")
-
private Integer id;
-
private Integer Fuesse;
-
private String Material;
-
-
public Tisch(){ }
-
-
return id;
-
}
-
-
this.id = id;
-
}
-
-
return Fuesse;
-
}
-
-
Fuesse = fuesse;
-
}
-
-
return Material;
-
}
-
-
this.Material = material;
-
}
-
-
getClass().getSimpleName(), Fuesse, Material });
-
}
-
}
Wie oben bereits oft erwähnt entfällt die Konfigurationsdatei. Also kommen wir gleich zu der Session.
-
// File: SingSessionFactory.java
-
-
package hibe;
-
-
import org.hibernate.SessionFactory;
-
import org.hibernate.cfg.AnnotationConfiguration;
-
import org.hibernate.cfg.Configuration;
-
-
public class SingSessionFactory {
-
-
/** The single instance of hibernate SessionFactory */
-
private static org.hibernate.SessionFactory sessionFactory;
-
-
/**
-
* Default constructor. It is private to guaranty singleton
-
*/
-
private SingSessionFactory() {
-
}
-
-
static {
-
final AnnotationConfiguration cfg = new AnnotationConfiguration();
-
cfg.configure("/hibernate.cfg.xml");
-
sessionFactory = cfg.buildSessionFactory();
-
}
-
public static SessionFactory getInstance() {
-
return sessionFactory;
-
}
-
-
}
Die Main Klasse
-
// File: HibeMySQL.java
-
-
package exa;
-
-
import hibe.SingSessionFactory;
-
import org.apache.log4j.Logger;
-
import org.hibernate.Session;
-
import org.hibernate.Transaction;
-
-
import obj.Tisch;
-
-
public class HibeMySQL {
-
-
private static Logger log = Logger.getLogger(HibeMySQL.class);
-
-
Tisch wohnzimmer = new Tisch();
-
wohnzimmer.setMaterial("Eiche");
-
wohnzimmer.setFuesse(3);
-
-
Session ses = SingSessionFactory.getInstance().getCurrentSession();
-
Transaction tx = ses.beginTransaction();
-
-
ses.save(wohnzimmer);
-
-
tx.commit();
-
}
-
}
Die angepasste Konfiguration von Hibernate
-
<!-- File: hibernate.cfg.xml -->
-
-
<?xml version='1.0' encoding='UTF-8'?>
-
<!DOCTYPE hibernate-configuration PUBLIC
-
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
-
<hibernate-configuration>
-
-
<session-factory>
-
<!-- MySQL connection -->
-
<property name="connection.url">jdbc:mysql://localhost:3306/bank</property>
-
<property name="connection.username">root</property>
-
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
-
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
-
<property name="connection.password"></property>
-
-
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
-
<property name="current_session_context_class">thread</property>
-
<property name="transaction.auto_close_session">true</property>
-
-
<!-- this will show us all sql statements -->
-
<property name="show_sql">true</property>
-
<!-- this will create the database tables for us -->
-
<property name="hbm2ddl.auto">update</property>
-
<mapping class="obj.Tisch" />
-
</session-factory>
-
-
</hibernate-configuration>
Zur Vollständigkeit noch die Konfigurationsdatei von Log4J.
-
# File: log4j.properties
-
-
### direct log messages to stdout ###
-
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
log4j.appender.stdout.Target=System.out
-
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-
### direct messages to file hibernate.log ###
-
#log4j.appender.file=org.apache.log4j.FileAppender
-
#log4j.appender.file.File=hibernate.log
-
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
-
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-
### set log levels - for more verbose logging change 'info' to 'debug' ###
-
-
log4j.rootLogger=debug, stdout
-
-
log4j.logger.org.hibernate=info
-
#log4j.logger.org.hibernate=debug
-
-
### log HQL query parser activity
-
#log4j.logger.org.hibernate.hql.ast.AST=debug
-
-
### log just the SQL
-
log4j.logger.org.hibernate.SQL=debug
-
-
### log JDBC bind parameters ###
-
log4j.logger.org.hibernate.type=info
-
#log4j.logger.org.hibernate.type=debug
-
-
### log schema export/update ###
-
log4j.logger.org.hibernate.tool.hbm2ddl=info
-
-
### log HQL parse trees
-
#log4j.logger.org.hibernate.hql=debug
-
-
### log cache activity ###
-
log4j.logger.org.hibernate.cache=info
-
-
### log transaction activity
-
#log4j.logger.org.hibernate.transaction=debug
-
-
### log JDBC resource acquisition
-
#log4j.logger.org.hibernate.jdbc=debug
-
-
### enable the following line if you want to track down connection ###
-
### leakages when using DriverManagerConnectionProvider ###
-
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
eBook: Java Tutorial: Hibernate, MySQL, Annotations

Wir haben es mal ausprobiert: novolinespielautomat ist ein gut funktionierender Trick zum Schlagen von Spielautomaten