These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 10 posts ] 
Author Message
 Post subject: Problem: Hibernate-Annotation mit Beispiel
PostPosted: Tue Jan 16, 2007 10:39 am 
Newbie

Joined: Tue Jan 16, 2007 10:25 am
Posts: 11
Hallo
Ich habe mich vor kurzem in die Java-Welt eingearbeitet. Nachdem ich mir die Grundlagen von Hibernate angeeignet habe und das auch geklappt hat, möchte ich nun Hibernate mit Annotations verwenden. Ich habe diesbezüglich schon das Internet durchforstet (auch die Doku von hibernate.org), aber so richtig "klick" hat es bei mir noch nicht gemacht :-) Ich habe mir ein einfaches Beispiel zusammengebastelt und versucht soweit zu kommen, wie es nur geht. Jetzt hänge ich jedoch an folgenden Problem...
Habe meinen Quellcode und die Fehlermeldung eingebunden, es wäre supernett, wenn mir einer helfen könnte, weil ich hier schon ein paar Tage dran sitze...Wenn irgendwelche Informationen noch fehlen, einfach Bescheid sagen.

#####################Tabelle###################
Tabelle: STUDENT
MATRIKELNR NAME VORNAME
0000000001 Raab Stefan
0000000002 Stallone Sylvester


#############Meine Main-Methode:###################
package Hibernate_Annotations;

import org.hibernate.*;
import org.hibernate.cfg.AnnotationConfiguration;

public class MainClass {


private static final SessionFactory sessionFactory =
new AnnotationConfiguration().configure("Hibernate_Annotations/hibernate.cfg.xml").buildSessionFactory();


public static void main (String[] args) {

MainClass m = new MainClass();
m.speichern();
}

public void speichern() {

Session session = sessionFactory.openSession();
Transaction trans = session.beginTransaction();
Student st = new Student();
st.setName("Hans");
st.setVorname("Wurst");
session.save(st);
trans.commit();
session.close();
}

#############Student.java#######################
package Hibernate_Annotations;

import javax.persistence.*;

@Entity
@Table(name = "STUDENT")
public class Student {

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STUDENT")
@Column(name = "MATRIKELNR")
int matrikelnr;

@Column(name = "NAME")
String name;

@Column(name = "VORNAME")
String vorname;

public int getMatrikelnr() {
return matrikelnr;
}

public void setMatrikelnr(int matrikelnr) {
this.matrikelnr = matrikelnr;
}

public String getName() {
return name;
}

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

public String getVorname() {
return vorname;
}

public void setVorname(String vorname) {
this.vorname = vorname;
}


}

###############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>
<property name="hibernate.connection.url">
jdbc:oracle:thin:@localhost:1521:XE
</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.connection.username">sandra</property>
<property name="hibernate.connection.password">sandra</property>

<mapping class="Hibernate_Annotations.Student"/>

</session-factory>
</hibernate-configuration>

###############Fehlermeldung#################
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not get next sequence value
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:96)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
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 Hibernate_Annotations.MainClass.speichern(MainClass.java:31)
at Hibernate_Annotations.MainClass.main(MainClass.java:18)
Caused by: java.sql.SQLException: ORA-02289: Sequence ist nicht vorhanden.

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)
... 11 more

Dabei existiert die Sequence SEQ_STUDENT, der Datenbankuser hat auch alle Rechte...Woran könnte es liegen, das er nicht den nächsten Wert generiert?


Last edited by Java_Newbie on Wed Jan 17, 2007 5:38 am, edited 3 times in total.

Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 16, 2007 11:45 am 
Newbie

Joined: Tue Feb 14, 2006 5:13 am
Posts: 18
irgendwas kann bei deinen angaben nicht stimmen:

deine java-klasse MainClass befindet sich im paket Hibernate_Annotations,
der stacktrace enthält aber eine klasse MainClass aus dem paket Hibernate.

kann es sein, dass du ein falsches Programm ausführst, z.b. eines das du für normales Hibernate geschrieben hast und das nur ein normales Configuration-Objekt erzeugt?

ansonsten würde ich nochmal checken, ob du passende versionen von hibernate und hibernate annotations verwendest.

gruss,
andi


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 4:09 am 
Newbie

Joined: Tue Jan 16, 2007 10:25 am
Posts: 11
Sorry, du hattest recht, war wirklich die Fehlermeldung aus dem Package Hibernate. Ihr seht aber auch alles :-) Habe die Fehlermeldung nochmal aktualisiert. Weiß da vielleicht einer weiter?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 5:47 am 
Newbie

Joined: Tue Feb 14, 2006 5:13 am
Posts: 18
das sieht jetzt aber wirklich nach einem versionsproblem aus. bist du sicher dass du hibernate annotations zusammen mit hibernate >= 3.2 verwendest?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 5:55 am 
Newbie

Joined: Tue Jan 16, 2007 10:25 am
Posts: 11
Ich habe alle Bibliotheken aus folgenden Packages eingebunden:
- hibernate-annotations-3.2.1.GA
- hibernate-3.2
- und den oracle Treiber

Müßte eigentlich richtig sein...


Last edited by Java_Newbie on Wed Jan 17, 2007 5:59 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 5:58 am 
Newbie

Joined: Tue Feb 14, 2006 5:13 am
Posts: 18
hups. schon wieder eine neue fehlermeldung ;-) vielleicht besser ein neues reply anfangen, als immer das ursprüngliche zu aktualisieren. da fällt es sehr schwer zu folgen!

bei der sequence würde ich nochmal genau checken, ob sie wirklich da ist. wenn du den generator explizit festlegst, musst du ihn auch von hand in der datenbank anlegen. du kannst ja zu testzwecken auch mal das generator attribute aus @GeneratedValue rausnehmen, und dann von hibernate das schema erzeugen lassen. nur dann erzeugt hibernate eine sequence hibernate_sequence die für alle GeneratedValues verwendet wird, die keinen expliziten generator gesetzt haben.

gruss,
andi


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 6:08 am 
Newbie

Joined: Tue Jan 16, 2007 10:25 am
Posts: 11
Danke für den Tipp!
Ich bin ja auch fleissig am basteln ;-) Aber ich glaube ich komme dem Ziel immer näher.
Die Sequence ist definitiv in der Datenbank angelegt, ich habe es eben auch nochmal mit einem alten Hibernateprojekt ausprobiert, da traten keine Probleme bei der Erzeugung von der ID auf.

Wenn ich @GeneratedValue (strategy=GenerationType.AUTO) weglasse funktioniert es, danke für den guten Tipp und deinen schnellen Antworten. Vielleicht bekomme ich das auch noch mit der Sequence hin...


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 6:49 am 
Newbie

Joined: Tue Feb 14, 2006 5:13 am
Posts: 18
bei mir klappt das mit den sequenzen (allerdings mit postgresql, und mit der automatisch generierten) aus annotations heraus problemlos. sollte also irgendwie schon gehen.

ansonsten würde ich mich über einen rating-punkt freuen, da auch ich noch häufiger mal im englischen forum fragen stellen muss und dafür credits gut gebrauchen kann!

lass dich nich entmutigen. auch ich hatte ein paar stolpersteine beim umstieg auf annotations aus dem weg zu räumen (einige hab ich auch noch vor mir), würde aber keinesfalls zurück zu den xml-files gehen!

viel erfolg

gruss,
andi


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 6:55 am 
Newbie

Joined: Tue Jan 16, 2007 10:25 am
Posts: 11
Ok, besten dank nochmal, wenn ich die Lösung finde stelle ich es hier rein.
Sorry, wußte gar nicht das es rating-punkte gibt, sonst hätte ich dir schon längst einen gegeben ;-) Habe mich gestern erst hier angemeldet.

Hoffe, du hast jetzt welche bekommen.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 17, 2007 10:39 am 
Newbie

Joined: Tue Jan 16, 2007 10:25 am
Posts: 11
Hier die Lösung für das Sequence-Problem:

package Hibernate_Annotations;

import javax.persistence.*;

@Entity
@SequenceGenerator(name="sequenz", sequenceName="STUDENT_SEQ", initialValue=1, allocationSize=1)
@Table(name = "STUDENT")
public class Student {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequenz")
@Column(name = "MATRIKELNR")
int matrikelnr;


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 10 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.