ciD4r Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 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 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 Zitieren
mtn Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 (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 1. Juni 2010 von mtn Zitieren
Schiller256 Geschrieben 2. Juni 2010 Geschrieben 2. Juni 2010 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. Zitieren
ciD4r Geschrieben 2. Juni 2010 Autor Geschrieben 2. Juni 2010 Ja super! Danke schonmal für die schnelle Hilfe!!!!! so, von der Fehlermeldung komm ich gleich zur nächsten 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 Zitieren
ciD4r Geschrieben 3. Juni 2010 Autor Geschrieben 3. Juni 2010 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; } } Zitieren
Schiller256 Geschrieben 3. Juni 2010 Geschrieben 3. Juni 2010 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. Zitieren
ciD4r Geschrieben 10. Juni 2010 Autor Geschrieben 10. Juni 2010 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 Zitieren
Empfohlene Beiträge
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.