Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo erstmal,

ich bin neu hier und hoffe, dass ich mein Thema an die richtige Stelle gepackt habe. Ich hab auch schon die Suche benutzt, aber nichts richtiges gefunden.

Ich hab ein Problem mit Hibernate. Ich hab grad versucht mein erstes Tutorial umzuschreiben auf meine Klassen. Selbstverständlich erstmal einfach:D Ich hab das erste Beispiel aus dem Buch: "Hibernate - Das Praxisbuch für Entwickler" benutzt. Ich hab verschiedene Sachen umgeschrieben und bekomm jetzt ne Fehlermeldung. Also funktionieren tut noch nix. Nunja, ich hab eigentlich alles wie im Tutorial gemacht, nur einzelne Sachen umgeschrieben. Hier kommt mal zuerst die Fehlermeldung:

21:47:28,349 INFO Version:15 - Hibernate Annotations 3.3.0.GA

21:47:28,369 INFO Environment:514 - Hibernate 3.2.4

21:47:28,369 INFO Environment:547 - hibernate.properties not found

21:47:28,369 INFO Environment:681 - Bytecode provider name : cglib

21:47:28,379 INFO Environment:598 - using JDK 1.4 java.sql.Timestamp handling

21:47:28,439 INFO Configuration:1426 - configuring from resource: /hibernate.cfg.xml

21:47:28,439 INFO Configuration:1403 - Configuration resource: /hibernate.cfg.xml

21:47:28,539 INFO Configuration:553 - Reading mappings from resource : contact.hbm.xml

Exception in thread "main" java.lang.ExceptionInInitializerError

at klassen.TestExample.createGericht(TestExample.java:200)

at klassen.TestExample.main(TestExample.java:34)

Caused by: org.hibernate.MappingNotFoundException: resource: contact.hbm.xml not found

at org.hibernate.cfg.Configuration.addResource(Configuration.java:563)

at org.hibernate.cfg.AnnotationConfiguration.parseMappingElement(AnnotationConfiguration.java:581)

at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)

at hibernate.InitSessionFactory.<clinit>(InitSessionFactory.java:30)

... 2 more

nun die Hibernate.cfg:

<?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>

<!-- Driver class -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- Connection -->

<property name="connection.url">jdbc:mysql://localhost/dharma</property>

<!-- Benutzerdaten -->

<property name="connection.username">root</property>

<property name="connection.password">swep</property>

<!-- MySQL Dialect -->

<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

<property name="current_session_context_class">thread</property>

<!-- update database if necessary -->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- show SQLStaetement on console -->

<property name="hibernate.show_sql">true</property>

<mapping resource="contact.hbm.xml" />

</session-factory>

</hibernate-configuration>

Klasse Gericht:

package klassen;

import java.io.Serializable;

import java.text.MessageFormat;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.SequenceGenerator;

import org.hibernate.annotations.Entity;

@Entity

@SequenceGenerator(name = "gericht_seq", sequenceName = "gericht_id_seq")

public class Gericht implements Serializable

{

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gericht_seq")

private String name;

private int gerichtID;

private int gutcount;

private int schlechtcount;

@OneToMany(mappedBy="gericht")

private Kommentar[] array;

public Gericht()

{

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public int getGerichtID()

{

return gerichtID;

}

public void setGerichtID(int gerichtID)

{

this.gerichtID = gerichtID;

}

public int getGutcount()

{

return gutcount;

}

public void setGutcount(int gutcount)

{

this.gutcount = gutcount;

}

public int getSchlechtcount()

{

return schlechtcount;

}

public void setSchlechtcount(int schlechtcount)

{

this.schlechtcount = schlechtcount;

}

public Kommentar[] getArray()

{

return array;

}

public void setArray(Kommentar[] array)

{

this.array = array;

}

public String toString()

{

return MessageFormat.format

("Gericht: {0} {1} {2} {3}",

new Object[]{name, gerichtID, gutcount, schlechtcount});

}

}

Klasse Kommentar:

package klassen;

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.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.SequenceGenerator;

@Entity

public class Kommentar implements Serializable

{

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Kommentar_gen")

@SequenceGenerator(name="Kommentar_gen", sequenceName="Kommentar_id_seq")

private int kommentarID;

private String kommentar;

@ManyToOne

@JoinColumn

private Gericht gericht;

public Kommentar()

{

}

public Kommentar (String kommentar)

{

this.kommentar = kommentar;

}

public int getKommentarID()

{

return kommentarID;

}

public void setKommentarID(int kommentarID)

{

this.kommentarID = kommentarID;

}

public Gericht getGericht()

{

return gericht;

}

public void setGericht(Gericht gericht)

{

this.gericht = gericht;

}

public String toString()

{

return MessageFormat.format

("{0}: kommentarID={1}, kommentar={2}",

new Object[] {getClass().getSimpleName(), kommentarID, kommentar});

}

}

Klasse Testexample:

/**

* Test application for example

* @author Sebastian Hennebrueder

* created Jan 16, 2006

* copyright 2007 by Laliluna.de

*/

package klassen;

import java.util.Iterator;

import java.util.List;

import org.apache.log4j.Logger;

import org.hibernate.Criteria;

import org.hibernate.FetchMode;

import org.hibernate.Hibernate;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.hibernate.transform.DistinctRootEntityResultTransformer;

import hibernate.InitSessionFactory;

public class TestExample {

private static Logger log = Logger.getLogger(TestExample.class);

public static void main(String[] args) {

try {

/* clean tables */

//clean();

/* simple create example */

createGericht();

/* relation example */

createRelation();

/* delete example */

delete();

/* update example */

update();

/* query example */

query();

/* show how to initialize data */

initKommentare();

} catch (RuntimeException e) {

/*

* we must take care to rollback all transaction and to close the

* session after an exception has occured. <pre> The session is

* closed by our configuration, when we rollback the session. See

* current_session_context </pre>

*/

try {

Session session = InitSessionFactory.getInstance()

.getCurrentSession();

if (session.getTransaction().isActive())

session.getTransaction().rollback();

} catch (HibernateException e1) {

log.error("Error rolling back transaction");

}

// throw the exception again

throw e;

}

}

/**

* creates and updates a honey

*/

private static void update() {

Gericht honey = createGericht();

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

honey.setName("Schweinzsulzn");

session.update(honey);

tx.commit();

}

/**

* creates a honey and deletes it afterwards

*/

private static void delete() {

Gericht honey = createGericht();

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

session.delete(honey);

tx.commit();

}

/**

* deletes all bees and honeys.

*/

private static void clean() {

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

session.createQuery("delete from Kommentar").executeUpdate();

session.createQuery("delete from Gericht").executeUpdate();

session.flush();

session.clear();

tx.commit();

}

/**

* create a Honey and a Bee and a relation beween them

*/

private static void createRelation() {

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

Gericht gericht = new Gericht();

gericht.setName("Erdbeerstrudl");

gericht.setGerichtID(12);

session.save(gericht);

Kommentar kommentar = new Kommentar("Des wor a goschtige Soch!!!");

session.save(kommentar);

/* create the relation on both sides */

kommentar.setGericht(gericht);

Kommentar[] array = gericht.getArray();

for (int i=0; i<array.length; i++)

{

if (array instanceof Kommentar)

{

System.out.println(""+i);

}

else

{

array = kommentar;

gericht.setArray(array);

}

}

/*urspruenglich mit hashset

*

* gericht.getArray().add(kommentar);

*/

tx.commit();

}

/**

* Find and list Honey entries in the database

*/

private static void query() {

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

List honeys = session.createQuery("select h from Honey as h").list();

for (Iterator iter = honeys.iterator(); iter.hasNext();) {

Gericht element = (Gericht) iter.next();

log.debug(element);

}

tx.commit();

}

/**

* load Gericht and init Kommentare

*/

private static void initKommentare() {

Session session = InitSessionFactory.getInstance().getCurrentSession();

// appraoch a) generates 1 additional query for each Gericht

Transaction tx = session.beginTransaction();

List gerichte = session.createQuery("select h from Gericht as h").list();

for (Iterator iter = gerichte.iterator(); iter.hasNext();) {

Gericht element = (Gericht) iter.next();

log.debug(element);

Hibernate.initialize(element.getArray());

}

// appraoch B) generates 1 query with a join

gerichte = session.createQuery(

"select h from Gericht as h left join fetch h.Kommentare")

.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();

session.createCriteria(Gericht.class)

.setFetchMode("Kommentare", FetchMode.JOIN).setResultTransformer(

Criteria.DISTINCT_ROOT_ENTITY).list();

tx.commit();

}

/**

* Creates a gericht object

*

* @return a fresh created Gericht

*/

private static Gericht createGericht() {

Gericht gericht= new Gericht();

gericht.setName("Sauerbraten");

gericht.setGerichtID(14);

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

session.save(gericht);

tx.commit();

return gericht;

}

}

Klasse InitSessionFactory:

package hibernate;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

public class InitSessionFactory {

/** The single instance of hibernate SessionFactory */

private static org.hibernate.SessionFactory sessionFactory;

/**

* Default constructor. It is private to guaranty singleton

*/

private InitSessionFactory() {

}

static {

final AnnotationConfiguration cfg = new AnnotationConfiguration();

/*

* configure Hibernate from hibernate.cfg.xml. This is expected to be in

* the class path = "src folder" = "root folder of classes"

*/

cfg.configure("/hibernate.cfg.xml");

sessionFactory = cfg.buildSessionFactory();

}

/**

* Returns the single instance of the session factory

* @return

*/

public static SessionFactory getInstance() {

return sessionFactory;

}

}

So, ich weiß leider nicht wo der Fehler liegt und würde mich sehr freuen, wenn jemand mal drüberschauen könnte, und mir sagt, was mein/e Fehler ist/sind. Da ich absoluter Anfänger bin in Sachen Hibernate bitte ich um Nachsicht:D

Vielen Dank schonmal im vorraus!!!

Andy

Geschrieben (bearbeitet)

Hi,

Caused by: org.hibernate.MappingNotFoundException: resource: contact.hbm.xml not found

Hibernate versucht beim Initialisieren die Datei "contact.hbm.xml" einzulesen, kann diese aber nicht finden. Hast du die erzeugt? Referenzieren tust du diese Datei ja und benötigt wird sie um zwischen Contact Klasse und der Contact Tabelle zu vermitteln.

Das ganze sollte wohl ungefähr so aussehen:

Writing First Hibernate Code

Die Leute von roseindia.net tragen echt alles zusammen... ;)

Dank und Gruß

Bearbeitet von mtn
Geschrieben

21:47:28,539 INFO Configuration:553 - Reading mappings from resource : contact.hbm.xml

Wie schon geschrieben wird versucht die contact.hbm.xml zu lesen, nur benötigst du die Datei überhaupt nicht. Denn du verwendest Annotations da werden die Mappings auf die Datenbank direkt in der Java Klasse durchgeführt und nicht in der zusätzlichen hbm Dateien.

Geschrieben

Ja super! Danke schonmal für die schnelle Hilfe!!!!! so, von der Fehlermeldung komm ich gleich zur nächsten :D Der schimpft über mein mapping. Aber ich kann den grund nicht verstehen. Ich hab die hibernate.cfg.xml mal anders geschrieben, wegen dem vorherigen Problem. Nun meckert er dies hier:

...

9:09:17,706 INFO AnnotationBinder:398 - Binding entity from annotated class: klassen.Kommentar

19:09:17,756 INFO EntityBinder:420 - Bind entity klassen.Kommentar on table Kommentar

Exception in thread "main" java.lang.ExceptionInInitializerError

at klassen.TestExample.createGericht(TestExample.java:200)

at klassen.TestExample.main(TestExample.java:34)

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on klassen.Kommentar.gericht references an unknown entity: klassen.Gericht

at org.hibernate.cfg.FkSecondPass.doSecondPass(FkSecondPass.java:56)

at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:474)

at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:295)

...

Die Klassen haben sich nicht verändert. ist quasi noch so wie oben gepostet. Warum meckert er da rum? Ich hab doch geschrieben:

@ManyToOne

@JoinColumn

private Gericht gericht;

Des müsste doch funktionieren, oder? Oder gibts da Probleme mit dem Array? Dass ich des irgendwie falsch gemappt hab? Nochmals vielen Dank für die Hilfe!!!!!!!!!!!

Andy

Geschrieben

So, da mein Hibernatebeispiel irgendwie garnet funktioniert hab ich mir gedacht, dass ichs mal abspecke und nacheinander versuche es aufzubauen. Jetzt hab ich fast garnix mehr drin, und es läuft trotzdem nix. Des macht mich noch ganz kirre!!! ich weiß einfach nicht woran des liegt und im Internet find ich auch nix. Sitzt jetzt schon über 8 Stunden an dem Problem... Erbitte mal wieder um Hilfe;)

Also mal wieder die Exception:

11:58:15,531 INFO Version:15 - Hibernate Annotations 3.3.0.GA

11:58:15,551 INFO Environment:514 - Hibernate 3.2.4

11:58:15,551 INFO Environment:547 - hibernate.properties not found

11:58:15,561 INFO Environment:681 - Bytecode provider name : cglib

11:58:15,561 INFO Environment:598 - using JDK 1.4 java.sql.Timestamp handling

11:58:15,651 INFO Configuration:1426 - configuring from resource: /hibernate.cfg.xml

11:58:15,651 INFO Configuration:1403 - Configuration resource: /hibernate.cfg.xml

11:58:15,761 INFO Configuration:1541 - Configured SessionFactory: null

11:58:15,831 INFO AnnotationBinder:398 - Binding entity from annotated class: klassen.Gericht

11:58:15,871 INFO EntityBinder:420 - Bind entity klassen.Gericht on table Gericht

11:58:15,941 INFO AnnotationConfiguration:350 - Hibernate Validator not found: ignoring

11:58:16,062 INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)

11:58:16,062 INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 20

11:58:16,062 INFO DriverManagerConnectionProvider:45 - autocommit mode: false

11:58:16,072 INFO DriverManagerConnectionProvider:80 - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/dharma

11:58:16,072 INFO DriverManagerConnectionProvider:86 - connection properties: {user=root, password=****}

11:58:16,382 INFO SettingsFactory:89 - RDBMS: MySQL, version: 5.1.45-community

11:58:16,382 INFO SettingsFactory:90 - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.9 ( Revision: ${svn.Revision} )

11:58:16,402 INFO Dialect:152 - Using dialect: org.hibernate.dialect.MySQLDialect

11:58:16,402 INFO TransactionFactoryFactory:34 - Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory

11:58:16,402 INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)

11:58:16,402 INFO SettingsFactory:143 - Automatic flush during beforeCompletion(): disabled

11:58:16,402 INFO SettingsFactory:147 - Automatic session close at end of transaction: enabled

11:58:16,402 INFO SettingsFactory:154 - JDBC batch size: 15

11:58:16,402 INFO SettingsFactory:157 - JDBC batch updates for versioned data: disabled

11:58:16,402 INFO SettingsFactory:162 - Scrollable result sets: enabled

11:58:16,402 INFO SettingsFactory:170 - JDBC3 getGeneratedKeys(): enabled

11:58:16,402 INFO SettingsFactory:178 - Connection release mode: auto

11:58:16,412 INFO SettingsFactory:202 - Maximum outer join fetch depth: 2

11:58:16,412 INFO SettingsFactory:205 - Default batch fetch size: 1

11:58:16,412 INFO SettingsFactory:209 - Generate SQL with comments: disabled

11:58:16,412 INFO SettingsFactory:213 - Order SQL updates by primary key: disabled

11:58:16,412 INFO SettingsFactory:217 - Order SQL inserts for batching: disabled

11:58:16,412 INFO SettingsFactory:386 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory

11:58:16,412 INFO ASTQueryTranslatorFactory:24 - Using ASTQueryTranslatorFactory

11:58:16,412 INFO SettingsFactory:225 - Query language substitutions: {}

11:58:16,412 INFO SettingsFactory:230 - JPA-QL strict compliance: disabled

11:58:16,422 INFO SettingsFactory:235 - Second-level cache: enabled

11:58:16,422 INFO SettingsFactory:239 - Query cache: disabled

11:58:16,422 INFO SettingsFactory:373 - Cache provider: org.hibernate.cache.EhCacheProvider

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [klassen.Gericht]

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)

at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)

at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)

at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)

at $Proxy7.save(Unknown Source)

at klassen.TestExample.createGericht(TestExample.java:77)

at klassen.TestExample.main(TestExample.java:34)

Caused by: java.sql.SQLException: No value specified for parameter 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)

at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2513)

at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2489)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2336)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2280)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2265)

at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)

... 23 more

11:58:16,422 INFO SettingsFactory:254 - Optimize cache for minimal puts: disabled

11:58:16,422 INFO SettingsFactory:263 - Structured second-level cache entries: disabled

11:58:16,422 INFO SettingsFactory:283 - Echoing all SQL to stdout

11:58:16,422 INFO SettingsFactory:290 - Statistics: disabled

11:58:16,422 INFO SettingsFactory:294 - Deleted entity synthetic identifier rollback: disabled

11:58:16,432 INFO SettingsFactory:309 - Default entity-mode: pojo

11:58:16,432 INFO SettingsFactory:313 - Named query checking : enabled

11:58:16,452 INFO SessionFactoryImpl:161 - building session factory

11:58:16,502 DEBUG CacheManager:239 - Configuring ehcache from classpath.

11:58:16,512 WARN ConfigurationFactory:127 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/C:/Dokumente%20und%20Einstellungen/Administrator/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar!/ehcache-failsafe.xml

11:58:16,512 DEBUG ConfigurationFactory:87 - Configuring ehcache from URL: jar:file:/C:/Dokumente%20und%20Einstellungen/Administrator/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar!/ehcache-failsafe.xml

11:58:16,522 DEBUG ConfigurationFactory:139 - Configuring ehcache from InputStream

11:58:16,552 DEBUG DiskStoreConfiguration:65 - Disk Store Path: C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\

11:58:16,562 DEBUG ConfigurationHelper:208 - No CacheManagerEventListenerFactory class specified. Skipping...

11:58:16,562 DEBUG ConfigurationHelper:183 - No CachePeerListenerFactoryConfiguration specified. Not configuring a CacheManagerPeerListener.

11:58:16,562 DEBUG ConfigurationHelper:159 - No CachePeerProviderFactoryConfiguration specified. Not configuring a CacheManagerPeerProvider.

11:58:16,642 DEBUG ConfigurationHelper:135 - No BootstrapCacheLoaderFactory class specified. Skipping...

11:58:16,863 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured

11:58:16,873 INFO AnnotationConfiguration:350 - Hibernate Validator not found: ignoring

11:58:16,873 INFO AnnotationConfiguration:350 - Hibernate Validator not found: ignoring

11:58:16,873 INFO SchemaExport:154 - Running hbm2ddl schema export

11:58:16,873 INFO SchemaExport:179 - exporting generated schema to database

11:58:16,873 ERROR SchemaExport:274 - Unsuccessful: create table Gericht (name varchar(255) not null auto_increment, primary key (name))

11:58:16,873 ERROR SchemaExport:275 - Incorrect column specifier for column 'name'

11:58:16,873 INFO SchemaExport:196 - schema export complete

Hibernate: insert into Gericht (name) values (?)

com.mysql.jdbc.JDBC4PreparedStatement@55d93d: insert into Gericht (name) values (** NOT SPECIFIED **)

11:58:16,973 WARN JDBCExceptionReporter:77 - SQL Error: 0, SQLState: 07001

11:58:16,973 ERROR JDBCExceptionReporter:78 - No value specified for parameter 1

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/dharma</property>

<property name="connection.username">root</property>

<property name="connection.password">swep</property>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- thread is the short name for

org.hibernate.context.ThreadLocalSessionContext

and let Hibernate bind the session automatically to the thread

-->

<property name="cache.provider_class">

org.hibernate.cache.EhCacheProvider

</property>

<property name="current_session_context_class">thread</property>

<property name="hibernate.transaction.factory_class">

org.hibernate.transaction.JDBCTransactionFactory

</property>

<!-- this will show us all sql statements -->

<property name="show_sql">true</property>

<property name="transaction.auto_close_session">true</property>

<!-- this will create the database tables for us -->

<property name="hibernate.hbm2ddl.auto">create</property>

<mapping class="klassen.Gericht" />

</session-factory>

</hibernate-configuration>

InitSessionFactory:

package hibernate;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

public class InitSessionFactory {

/** The single instance of hibernate SessionFactory */

private static org.hibernate.SessionFactory sessionFactory;

/**

* Default constructor. It is private to guaranty singleton

*/

private InitSessionFactory() {

}

static {

final AnnotationConfiguration cfg = new AnnotationConfiguration();

/*

* configure Hibernate from hibernate.cfg.xml. This is expected to be in

* the class path = "src folder" = "root folder of classes"

*/

cfg.configure("/hibernate.cfg.xml");

sessionFactory = cfg.buildSessionFactory();

}

/**

* Returns the single instance of the session factory

* @return

*/

public static SessionFactory getInstance() {

return sessionFactory;

}

}

Klasse Gericht:

package klassen;

import java.io.Serializable;

import java.text.MessageFormat;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.SequenceGenerator;

@Entity

@SequenceGenerator(name = "gericht_seq", sequenceName = "gericht_id_seq")

public class Gericht implements Serializable

{

//private static final long serialVersionUID = 6789761254603569794L;

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private String name;

public Gericht()

{

super();

}

@Override

public String toString()

{

return MessageFormat.format

("Gericht: {0}",

new Object[]{name});

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

}

TestExample:

package klassen;

import java.util.Iterator;

import java.util.List;

import org.apache.log4j.Logger;

import org.hibernate.Criteria;

import org.hibernate.FetchMode;

import org.hibernate.Hibernate;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.hibernate.transform.DistinctRootEntityResultTransformer;

import hibernate.InitSessionFactory;

public class TestExample {

private static Logger log = Logger.getLogger(TestExample.class);

public static void main(String[] args) {

try {

/* clean tables */

//clean();

/* simple create example */

createGericht();

/* relation example */

//createRelation();

/* delete example */

//delete();

/* update example */

//update();

/* query example */

//query();

/* show how to initialize data */

//initKommentare();

} catch (RuntimeException e) {

/*

* we must take care to rollback all transaction and to close the

* session after an exception has occured. <pre> The session is

* closed by our configuration, when we rollback the session. See

* current_session_context </pre>

*/

try {

Session session = InitSessionFactory.getInstance()

.getCurrentSession();

if (session.getTransaction().isActive())

session.getTransaction().rollback();

} catch (HibernateException e1) {

log.error("Error rolling back transaction");

}

// throw the exception again

throw e;

}

}

private static Gericht createGericht() {

Gericht gericht= new Gericht();

gericht.setName("Sauerbraten");

Session session = InitSessionFactory.getInstance().getCurrentSession();

Transaction tx = session.beginTransaction();

session.save(gericht);

tx.commit();

return gericht;

}

}

Geschrieben

Bitte verwende die Code Tag's wenn die Code hier ein stellst. Deine Nachrichten lassen sich ja kaum lesen.

Hast du schon mal ein einfaches Tutorial aus dem Internet vollständig durchgearbeitet und verstanden bevor du anfängst etwas an deine Bedürfnisse anzupassen? Denn du kopierst hier wild Ausschnitte aus unterschiedlichen Quellen zusammen ohne verstanden zu haben was eigentlich da passiert. Denn eine ID kann man von außen nicht setzen zumindest nicht wenn da ein IDGenerator zusätzlich definiert ist. Wieso du an die Klasse eine SequenceGenerator hängst verstehe ich überhaupt nicht.

Als erstes solltest du dir das Tutorial aus der hibernate Dokumentation anschauen, da werden im ersten Kapitel Grundlagen zum Thema hibernate geschaffen.

HIBERNATE - Relational Persistence for Idiomatic Java

Das Tutorial setzt zwar noch auf die Hibernate mapping Dateien und nicht auf JPA auf aber für den Anfang reicht es. Wenn du das Tutorial durch und verstanden hast dann kannst du anfangen etwas auf deine Bedürfnisse anzupassen und mal in Richtung JPA und Hibernate Annotations schauen.

Geschrieben

Hallo,

tut mir leid, des mit den Code Tags ist irgendwie an mir vorbeigegangen. Mitlerweile läuft mein Hibernate ganz gut. Ich komm zwar recht schleppend vorran, aber es wird immer besser. Nun hab ich eine einfache Frage. Wenn ich ein Objekt habe, und in diesem möchte ich eine ArrayList mit Strings speichern, wie mach ich des? Also mit dem Mapping mein ich. Hab ich da wirklich nur die Möglichkeit mir ne eigene Klasse für diese ArrayList mit nem String, ner ID und nem Objekt von dem gemappt wird, zu definieren? Oder kann ich des auch einfacher lösen.

Vielen Dank schonmal im vorraus

Andy

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...