Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 8 posts ] 
Author Message
 Post subject: Probleme mit ß und ss
PostPosted: Tue May 31, 2005 4:41 am 
Newbie

Joined: Tue May 31, 2005 3:46 am
Posts: 3
Hallo, ich habe folgendes Problem:
Hibernate unterscheidet nicht zwischen "wweiss" und "wweiß".

wenn ich mit Hibernate alle Sätze mit Username "wweiss" zurückgeben lassen möchte (siehe Query oben), dann bekomme ich automatisch auch die sätze mit username "wweiß" mit zurück, was ich aber nicht möchte.

Wie kann das sein?

problemverursachende Query (von Hibernate erzeugt)
select brandaccou0_.USER_USERNAME as USER_USE9___
from BRANDACCOUNT brandaccou0_
where brandaccou0_.USER_USERNAME=N'wweiss'


Result:
USER_USE9___
wweiss
wweiß



Was ich noch probiert habe ist, wenn man die erzeuge query manuell ausführt und statt N'wweiss' nur 'wweiss' (also ohne N) schreibt kommen auch nur sätze mit "wweiss" zurück.
Jetzt müsste ich nur noch wissen wie ich Hibernate sage, dass er beim Bau der query dieses N' im obigen Fall weg lassen soll!

Für Eure Hilfe jetzt schon besten
Dank

Manfred


Meine Environment:
Hibernate version: 2.1.8
Name and version of the database you are using: MSSQL 2000

Mapping documents:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping package="de.sag.tradeplace.migration.dbOld">
<class
name="Brandaccount"
table="BRANDACCOUNT"
>
<id
name="SynID"
type="integer"
column="SynID"
>
<generator class="native"/>
</id>



<many-to-one name="User_Username" class="User0" >
<column name="USER_USERNAME" sql-type="varchar(250)" not-null="true" />
</many-to-one>



</class>
</hibernate-mapping>


Dieser Error passiert dann verständlicherweise später
[Ljava.lang.StackTraceElement;@869113
net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection
at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:201)
at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:71)
at net.sf.hibernate.collection.Set.iterator(Set.java:130)
at TpMigrator.fillBrandportalAccount(TpMigrator.java:539)
at TpMigrator.fillUser(TpMigrator.java:348)
at TpMigrator.fillAddressCompanyUser(TpMigrator.java:229)
at TpMigrator.main(TpMigrator.java:709)
Caused by: net.sf.hibernate.HibernateException: More than one row with the given identifier was found: wweiß, for class: de.sag.tradeplace.migration.dbOld.User0
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:71)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:51)
at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:413)
at net.sf.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:2131)
at net.sf.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:2001)
at net.sf.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1963)
at net.sf.hibernate.type.ManyToOneType.resolveIdentifier(ManyToOneType.java:69)
at net.sf.hibernate.type.EntityType.resolveIdentifier(EntityType.java:208)
at net.sf.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:2219)
at net.sf.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:319)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:309)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:138)
at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:1020)
at net.sf.hibernate.loader.Loader.loadCollection(Loader.java:995)
at net.sf.hibernate.loader.OneToManyLoader.initialize(OneToManyLoader.java:93)
at net.sf.hibernate.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:288)
at net.sf.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:3315)
at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:195)
... 6 more


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 31, 2005 4:43 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Hibernate aendert nichts an Strings. JDBC Treiber und Datenbank checken.


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 31, 2005 4:45 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Und, da du keinen Code zeigst, kann man auch nicht sagen ob du es richtig machst mit einem query argument oder ob du tatsaechlich den String selbst zusammenbaust. Letzteres waere falsch...


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 31, 2005 5:05 am 
Newbie

Joined: Tue May 31, 2005 3:46 am
Posts: 3
hallo christian,

es wird kein String zusammengebaut!

das ganze passiert beim durchiterieren einen collection:
Code:
            brandAccounts =  (Set) user.getBrandaccounts();
            iter = brandAccounts.iterator();



Problem ist nicht der String, der ist richtig.
ABER das N' vor dem String 'wweiss' müsste weg, damit der SQLServer ein richtiges Ergebnis zurückgibt (also ohne wweiß)!
Hab mit "
<column name="USER_USERNAME" sql-type="varchar(250)" not-null="true" />" versucht Hibernate mitzuteilen das das Feld in der DB kein NVarchar sondern ein varchar ist!


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 31, 2005 5:08 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Achso, das ist M$FT software. Sorry - keine Ahnung und wills auch nicht.


Top
 Profile  
 
 Post subject: locale settings
PostPosted: Tue May 31, 2005 6:03 am 
Beginner
Beginner

Joined: Sun May 29, 2005 4:03 pm
Posts: 24
Hallo, vielleicht kann ich helfen, das Problem liegt beim SQL Server, der hat standardmäßig als Encoding meines Wissens nach WinCP1252, Java aber einen anderen (ISO soweit ich weiss oder Unicode).
Du musst schauen, dass die Zeichensätze kompatibel zueinander sind
(Rede da mal mit Eurem DB Admin), sonst kanns massiv haken und Du rennst auf der Java Seite in Umlaut Probleme rein.

Diese Problematik gilt übrigends für jede Datenbank nicht nur für den SQL Server, üblicherweise kannst Du beim anlegen der DB oder der Tabelle das Encoding für Characters und Strings bei einer Datenbank angeben.


Top
 Profile  
 
 Post subject: Hab ich noch vergessen
PostPosted: Tue May 31, 2005 6:06 am 
Beginner
Beginner

Joined: Sun May 29, 2005 4:03 pm
Posts: 24
Wenns trotz encoding hakt, dann macht wirklich der JDBC Treiber irgendeine schweinerei, für den MSSQL Server gibts neben dem Microsoft Treiber noch die TDS Treiber (jtds und freetds), die Meiner Erfahrung nach besser Funktionieren als die von Microsoft.
Es gibt auch noch eine Reihe von komerziellen Anbietern (wie bei Oracle), die davon leben, dass der Hersteller verbuggte Treiber ausliefert, wenn Du es mit keiner der freien Alternativen und mit den original Microsoft Treibern nicht hinbekommst. Die Sybase wären auch eventuell noch eine Alternative, die sollen angeblich noch mit den aktuellen SQL Server Versionen funktionieren.
(Der SQL Server ist ja ein Sybase Derivat)


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 31, 2005 10:58 am 
Newbie

Joined: Tue May 31, 2005 3:46 am
Posts: 3
OK ich hab das Problem gelöst:

einfach das betroffene DB-Feld, wo ss oder ß vorkommen
beim createn der table mit einer Collation versehen, welche CaseSensitive ist und die Sortierreihenfolge nicht ignoriert.

Das kann bei MSQL wie folgt aussehen:

z.B.


Create table USER0 (
USERNAME nVarchar(250) COLLATE Latin1_General_BIN NOT NULL
...
)

GO


Nochmals Dank und Gruss an Alle
Manfred


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 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.