-->
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.  [ 8 posts ] 
Author Message
 Post subject: Probleme mit Umlaut
PostPosted: Tue Jun 19, 2007 6:30 pm 
Newbie

Joined: Tue Jun 19, 2007 6:19 pm
Posts: 4
Hallo allerseits,

Ich habe folgendes Problem mit Umlauten. Sobald ich einen String mit Umlauten speichern möchte gibt es Probleme.

Session session = factory.getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(this);
session.getTransaction().commit();

Ohne Umlaute sind keine Probleme vorhanden, ebenso können Wörter mit Umlauten problemlos aus der DB gelesen werden

Verwendet werden die folgenden Komponenten:
hibernate3
tomcat5.5
MySQL 5
Java 5.0

Irgendwie hat Hibernate probleme die Umlaute zu encoden, wenn mit "normalen" preparedStmt gearbeitet wird, gibt es keine Probleme, hat jemand eine Idee?

Die Fehlermeldung ist wie folgt:
JDBCExceptionReporter:63 - Could not execute JDBC batch update [update Label set deutsch=?, franzoesisch=?, italienisch=?, englisch=? where bezeichnung=?]
java.sql.BatchUpdateException: Incorrect string value: '\xF6l' for column 'deutsch' at row 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at ch.contura.database.PersistenceObject.save(PersistenceObject.java:23)
at ch.contura.database.PersistenceObject$$FastClassByCGLIB$$c2a47990.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
at ch.contura.database.pojo.Label$$EnhancerByCGLIB$$1dc4d319.save(<generated>)
at ch.contura.ui.logic.reports.ListeLabel.processPost(ListeLabel.java:47)
at ch.contura.ui.logic.reports.ListeLabel.process(ListeLabel.java:32)
at ch.contura.MainControllerServlet.process(MainControllerServlet.java:110)
at ch.contura.MainControllerServlet.doPost(MainControllerServlet.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Unknown Source)
00:04:55,031 WARN JDBCExceptionReporter:71 - SQL Error: 1366, SQLState: HY000
00:04:55,041 ERROR JDBCExceptionReporter:72 - Incorrect string value: '\xF6l' for column 'deutsch' at row 1
00:04:55,071 ERROR AbstractFlushingEventListener:300 - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at ch.contura.database.PersistenceObject.save(PersistenceObject.java:23)
at ch.contura.database.PersistenceObject$$FastClassByCGLIB$$c2a47990.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
at ch.contura.database.pojo.Label$$EnhancerByCGLIB$$1dc4d319.save(<generated>)
at ch.contura.ui.logic.reports.ListeLabel.processPost(ListeLabel.java:47)
at ch.contura.ui.logic.reports.ListeLabel.process(ListeLabel.java:32)
at ch.contura.MainControllerServlet.process(MainControllerServlet.java:110)
at ch.contura.MainControllerServlet.doPost(MainControllerServlet.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF6l' for column 'deutsch' at row 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
... 30 more


Vielen Dank für eure Hilfe.
Gruss Max


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 20, 2007 4:40 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
welche Encoding hast Du Hibernate denn im Mapping mitgegeben? Wenn Du ihm dort natürlich ein Encoding mitteilst, welches keine Umlaute beherrscht, kann Hibernate nichts dafür.
probier es vielleicht mal mit ISO-8859-1

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 20, 2007 5:48 pm 
Newbie

Joined: Tue Jun 19, 2007 6:19 pm
Posts: 4
Vielen Dank für den Tip, es ist mir klar was du meinst nur habe ich keine Ahnung wie ich das Hibernate mitteilen soll.

Hier mal ein Beispiel der Mappingdatei. Wo kann ich das nun Einstellen, sprich wie heisst das Tag? Oder muss die Einstellung im hibernate.cfg.xml gemacht werden, wenn ja wie heisst das Attribute?

Schon mal im voraus danke für deine Hilfe.

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="test.database.pojo.Werte" table="Werte">

<id name="wert" type="char">
<generator class="assigned" />
</id>

<property name="name"/>

</class>
</hibernate-mapping>


Last edited by tritonman on Thu Jun 21, 2007 2:29 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 21, 2007 2:28 am 
Newbie

Joined: Tue Jun 19, 2007 6:19 pm
Posts: 4
tritonman wrote:
Vielen Dank für den Tip, es ist mir klar was du meinst nur habe ich keine Ahnung wie ich das Hibernate mitteilen soll.

Hier mal ein Beispiel der Mappingdatei. Wo kann ich das nun einstellen, sprich wie heisst das Tag? Oder muss die Einstellung im hibernate.cfg.xml gemacht werden, wenn ja wie heisst das Attribute?

Schon mal im voraus danke für deine Hilfe.

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="test.database.pojo.Werte" table="Werte">

<id name="wert" type="char">
<generator class="assigned" />
</id>

<property name="name"/>

</class>
</hibernate-mapping>


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 21, 2007 3:25 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Quote:
<?xml version='1.0' encoding='UTF-8'?>


Genau dort musst Du in allen Mappings und in der cfg das Encoding umstellen!

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 21, 2007 4:02 am 
Newbie

Joined: Thu Jun 07, 2007 10:23 am
Posts: 9
FPC wrote:
Quote:
<?xml version='1.0' encoding='UTF-8'?>


Genau dort musst Du in allen Mappings und in der cfg das Encoding umstellen!


Das kann ich nicht glauben. Das ist das Encoding der XML-Datei und nicht Datenbank. Hibernate ist eine Java-Anwendung und da sind alle Strings intern 2Byte Unicode. Der JDBC-Treiber muss das für die Datenbank ins DB-Format umwandeln und da scheint der Fehler zu liegen.

Es scheint so, also ob deine Datenbank UTF-8 erwartet, aber Latin1 bekommt. Über die JDBC-URL kann du dem mysql-connector mitteilenen, dass die Datenbank UTF-8 erwartet. Achte auch darauf, das dein mysql-connector zur mysql-Version passt.

Mehr Infos in der Doku zum MySQL-Connector.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 21, 2007 5:34 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Naja ich meinte auch die XMLs, an die DB habe ich im ersten Moment gar nicht gedacht. Es ist trotzdem möglich, dass die XML aufgrund der Kodierung falsch interpretiert werden. Aber die DB würde ich ehrlich gesagt auch als Erstes untersuchen!

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 21, 2007 3:43 pm 
Newbie

Joined: Tue Jun 19, 2007 6:19 pm
Posts: 4
Hallo zusammen,

Vielen Dank, es war der treiber. characterEncoding=UTF-8 im connectionstring hat alle Probleme gelöst.

Gruss Max


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 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.