Insensitive case mit Hibernate

tamouh

Grünschnabel
Hallo!
wie kann ich das Speichern von Attributen in die einer Oracle Datenbank Tabelle erzwingen, so daß die Suche nach einem User mit dem Namen: test auch über Test oder tEST...möglich ist!

Ist das möglich mit Hibernate dies zu definieren(Annotations), z.bsp einmal test als Name in die Tabelle speichern, danach soll nicht mehr möglich TEST als Name für eine andere Benutzer zu speichern?ich hoffe, man könnte mich verstehen und entschuldige mich für die falsche Formulierung des Themas(bin Ausländer:))
Danke schon mal im voraus!
 
Hallo,

also ich weiß nicht, ob es mit Hibernate möglich ist, aber du kannst eine SQL-Abfrage so formulieren.

SQL:
select * from tabelle where upper(feldname) = upper(feldinhalt)

Das müsste so bei Oracle funktionieren. Eine ähnliche Funktion gibts auch bei anderen Datenbanken.

MFG

zEriX
 
Zuletzt bearbeitet:
Danke für Antwort, mit der Abfrage ist kein Problem, das geht wie du geschrieben über upp(), für mich ist das Problem die Definition der Datenbankstruktur mit den genannten Eingenschaften(insensitive case).aber Danke trotzdem.
 
Na du könntest doch bevor du abspeicherst eine solche Abfrage machen (mit Hibernate), wenn dann nichts zurück geliefert wird ist der Name noch nicht vergeben.

Hibernate ist ja "nur" zum mappen der Objecte da. Da sollte man eine solche Überprüfung selbst in der Logik machen. Hibernate schaut ja dann außerdem ja auch nach dem Primary Key und einen Namen sollte man nicht zum Primary Key machen.

MFG

zEriX
 
der Name alleine ist keine Primary key, aber mit anderen Attributen wie Geburtsdatum etc repräsentieren eine zusammengesetzte Schlüssel.gibt keine Andere Lösung?
 
Als Primary Key eignet sich am besten immer eine Zahl die hochgezählt wird. Sowas unterstützt auch Hibernate.

MFG

zEriX
 
Als Primary Key eignet sich am besten immer eine Zahl die hochgezählt wird. Sowas unterstützt auch Hibernate.
... ist aber auf ner Oracle ne 1Qual anzulegen (man braucht ne extra Sequence dafür).

Meines Erachtens nach ist sowas eine funktionale Anforderung an die Anwendung und hat damit nichts in der DB zu suchen. Hibernate ist eigentlich auch die falsche Gegend um sowas zu implementieren. Das sollte in die Geschäftslogik, vielleicht noch ins DAO.

Gruß
Ollie
 
@MSProductions
Hibernate unterstützt da mehrere Wege dies zu realisieren. Sequenze-Tabelle, die native Möglichkeit der DB und es war noch eins, aber das fällt mir gerade nicht ein.
In der Mapping-Datei kann man implementieren, welcher Mechanismus dafür verwendet werden soll.
Bei Toplink ist das auch nicht viel anders.

MFG

zEriX
 
Hallo, tamouh,
kann es sein, dass Du versuchst, die Aufgabe des Abgleichs zwischen User-Eingabe und vorhandenen Usern auf die Datenbank abzuwälzen?
Das ist alter Client-Server-Stil, bei dem die Datenbank große Teile der Geschäftslogik abdeckte.
Wenn Du die Prüfung dem DB-Backend überlässt, in Deinem Fall Oracle, müsstest Du ja eine native Oracle-Fehlermeldung auswerten (und diese noch durch Hibernate "tunneln"), was allen n-tier-Regeln wiederspricht.

Nein, Du müsstest schon zweistufig vorgehen - erst die Prüfung über eine Abfrage, dann ggf. die Anlage eines neuen Users.

Hibernate bietet mit dem QbE-Verfahren übrigens einen hervorragenden objektorientierten Mechanismus für die Abfrage, mit dem Du nicht einmal HSQL (oder gar nativen SQL-Dialekt) benötigst. Dabei kann auch case-insensitive gesucht werden (macht man bei Strings ja sowieso meistens).

Eine gute Erklärung dafür findest Du hier: http://www.devx.com/Java/Article/28754/1954?pf=true

Ich würde mir auch unbedingt das Standardwerk zu Hibernate zulegen:
"Java Persistence with Hibernate" von Christian Bauer und Gavin King.
Gute Erklärungen und jede Menge wichtiger Hinweise.

Eine Anmerkung noch:
Es ist good practice im Datenbankbereich, Tabellen immer einen nicht sprechenden Primary Key zu geben, vorzugsweise einen laufenden Zähler.
Und ein zusammengesetzter Primary Key ist besonders gefährlich, denn die Wirklichkeit ist in der Regel nicht so, wie das Feinkonzept ;-)
Die Einrichtung von Sequences unter Oracle wirkt auf den ersten Blick etwas lästig, ist aber eigentlich völlig simpel, also keine Angst.
 

Neue Beiträge

Zurück