F
FelixVogt
Gast
Hallo,
Ich hab hier in einem Studienprojekt ein Problem mit der Implementierung des Persistence Layers in Hibernate.
Unser Problem rührt daher, dass wenn wir ein Objekt ändern wollen, und diese Änderungen speichern wollen, dieses Bereits in der Datenbank vorhanden ist, und wir eine Exception von Hibernate erhalten:
Duplicate entry 'rtest' for key 2
ERROR - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.ErrorCodeConverter.convert,,,,,
Wir haben uns mit der Implementierung an ein Tutorial gehalten (event Tutorial ... kennen vielleicht einige
Wir haben folgende Klassen:
Klasse Event:
[/code]
Klasse EventManager:
Klasse HibernateUtil:
Mapping Datei:
Es wäre total Klasse, wenn mir da jemand weiterhelfen könnte, da ich den Kram bis nächste Woche fertig haben muss.
Vielen Dank schonmal im vorraus.
Gruss
Felix
Ich hab hier in einem Studienprojekt ein Problem mit der Implementierung des Persistence Layers in Hibernate.
Unser Problem rührt daher, dass wenn wir ein Objekt ändern wollen, und diese Änderungen speichern wollen, dieses Bereits in der Datenbank vorhanden ist, und wir eine Exception von Hibernate erhalten:
Duplicate entry 'rtest' for key 2
ERROR - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.ErrorCodeConverter.convert,,,,,
Wir haben uns mit der Implementierung an ein Tutorial gehalten (event Tutorial ... kennen vielleicht einige
Wir haben folgende Klassen:
Klasse Event:
Code:
import java.util.Date;
public class Event {
private String title;
private String test;
private Date date;
private Long id;
public void setTest(String ctest){
test = ctest;
}
public String getTest(){
return test;
}
private Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
Klasse EventManager:
Code:
import java.util.Date;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class EventManager {
private static Event theEventzu;
public static void main(String[] args) throws java.text.ParseException {
EventManager instance = new EventManager();
String title = "rtest";
Date theDate = new Date();
List events = instance.listEvents();
theEventzu = (Event) events.get(0);
instance.store(title, theDate);
for (int i = 0; i<events.size(); i++) {
Event theEvent = (Event) events.get(i);
System.out.println("Event " + theEvent.getTitle() + " Time: " + theEvent.getTest());
}
HibernateUtil.closeSession();
}
private List listEvents() {
try {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
List result = session.createQuery("from Event").list();
tx.commit();
return result;
} catch (HibernateException e) {
throw new RuntimeException(e.getMessage());
}
}
private void store(String title, Date theDate) {
try {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setTest("das ist ein Test");
session.saveOrUpdate(theEvent);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
}
}
Klasse HibernateUtil:
Code:
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
Mapping Datei:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Event" table="EVENTS">
<id name="id" column="uid" type="long">
<generator class="increment"/>
</id>
<property name="title" column="eventtitle" unique="true"/>
<property name="test" column="test"/>
</class>
</hibernate-mapping>
Es wäre total Klasse, wenn mir da jemand weiterhelfen könnte, da ich den Kram bis nächste Woche fertig haben muss.
Vielen Dank schonmal im vorraus.
Gruss
Felix