-->
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.  [ 7 posts ] 
Author Message
 Post subject: Abfrage eines Benutzers anhand seines Benutzernamens
PostPosted: Wed May 16, 2007 10:10 am 
Newbie

Joined: Wed May 16, 2007 9:55 am
Posts: 8
Hallo Gemeinde,

ich habe vor mir ein Objekt Benutzer zurück geben zu lassen anhand des Nachnamens.

Die Datenbanktabelle hat als PrimaryKey eine ID. Wenn ich den Benutzer über die ID abfrage funktioniert es, aber sobald ich das gleiche Szenario auf Grund des Benutzernamens durchführe funktioniert es nicht mehr.

Liegt es eventuell irgendwie daran das ID als Primärschlüssel definiert ist und der Benutzername nicht oder woran könnte das liegen?

Vielen Dank für EUre Tipps.


.hbm.xml
Code:
...
<id name=id" type="int">
  <column name="ID" />
  <generator class="identity" />
</id>
...
<property name="nachname" type="string" />
...


.handler.java
Code:
benutzer = new BenutzerDAO().getBenutzerByBenutzername(bname)
nachname = benutzer.getNachname();


Fehlermeldung:
No row with given identifier exists
(Obwohl der Nachname in der Datenbank vorhanden ist)


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 16, 2007 11:02 am 
Regular
Regular

Joined: Fri May 12, 2006 4:05 am
Posts: 106
Jetzt steht leider der gesamte interessante (weil hibernate-relevante) Code in BenutzerDAO.getBenutzerByBenutzername(). Wenn wir den nicht sehen haben wir wenig Chancen was zu helfen....


Top
 Profile  
 
 Post subject:
PostPosted: Sun May 20, 2007 4:23 pm 
Newbie

Joined: Wed May 16, 2007 9:55 am
Posts: 8
Hier der Code der NutzerDAO:

Code:
public class NutzerDAO {

   public NutzerDAO() {
      HibernateUtil.beginTransaction();
   }
   public Nutzer getnutzerById(Integer id) {
      return (Nutzer) HibernateUtil.getSession().load(Nutzer.class, id);
   }
   public Nutzer getnutzerByBenutzername(String nachname) {
      return (Nutzer) HibernateUtil.getSession().load(Nutzer.class, nachname);
   }
      
}


Wie gesagt den Benutzer über die ID bekomme ich und es klappt. Wenn ich das selbe Beispiel umschreibe und nur ID gegen Nachname tausche haut es nicht mehr hin.

Hat jemand ne Idee?


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 21, 2007 1:25 am 
Newbie

Joined: Wed May 16, 2007 9:55 am
Posts: 8
Neu_Hibernate_Newbie wrote:
Hier der Code der NutzerDAO:

Code:
public class NutzerDAO {

   public NutzerDAO() {
      HibernateUtil.beginTransaction();
   }
   public Nutzer getnutzerById(Integer id) {
      return (Nutzer) HibernateUtil.getSession().load(Nutzer.class, id);
   }
   public Nutzer getnutzerByBenutzername(String nachname) {
      return (Nutzer) HibernateUtil.getSession().load(Nutzer.class, nachname);
   }
      
}




Wie gesagt den Benutzer über die ID bekomme ich und es klappt. Wenn ich das selbe Beispiel umschreibe und nur ID gegen Nachname tausche haut es nicht mehr hin.

Hat jemand ne Idee?

Code:
public class Nutzer implements java.io.Serializable {

   private int id;
   private String vorname;
   private String nachname;
   private String passwort;
   private String strasse;
   private Integer hausnummer;
   private Integer plz;
   private String ort;
   private String email;

   public Nutzer() {
   }
   
   public Nutzer(String nachname) {
      this.nachname = nachname;
   }

   public int getId() {
      return this.id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public Nutzer(String vorname, String nachname,String passwort, String strasse,
         Integer hausnummer, Integer plz, String ort, String email) {
      this.vorname     = nachname;
      this.nachname    = vorname;
      this.passwort   = passwort;
      this.strasse     = strasse;
      this.hausnummer = hausnummer;
      this.plz       = plz;
      this.ort      = ort;
      this.email      = email;
   }

   public String getNachname() {
      return this.nachname;
   }

   public void setNachname(String nachname) {
      this.nachname = nachname;
   }

   public String getOrt() {
      return ort;
   }

   public void setOrt(String ort) {
      this.ort = ort;
   }

   public Integer getPlz() {
      return plz;
   }

   public void setPlz(Integer plz) {
      this.plz = plz;
   }

   public String getStrasse() {
      return strasse;
   }

   public void setStrasse(String strasse) {
      this.strasse = strasse;
   }

   public String getVorname() {
      return vorname;
   }

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

   public Integer getHausnummer() {
      return hausnummer;
   }

   public void setHausnummer(Integer hausnummer) {
      this.hausnummer = hausnummer;
   }

   public String getPasswort() {
      return passwort;
   }

   public void setPasswort(String passwort) {
      this.passwort = passwort;
   }

   public String getEmail() {
      return email;
   }

   public void setEmail(String email) {
      this.email = email;
   }

}



Nutzer.hbm.xml:

Code:
...
        <id name="id" type="int">
            <column name="ID" />
            <generator class="identity" />
        </id>
       
        <property name="vorname"     type="string"  length="30" />
        <property name="nachname"    type="string"  length="30" />
        <property name="passwort"    type="string"  length="12" />
        <property name="strasse"     type="string"  length="50" />
        <property name="hausnummer" type="integer"              />
        <property name="plz"         type="integer"           />
        <property name="ort"         type="string"  length="30" />
        <property name="email"        type="string"  length="30" />
...


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 21, 2007 5:45 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Die load- Methode erwartet als Parameter ein Serializable, sprich ein PK. Da Nachname kein PK ist wirst so auch nichts finden.

Du kannst Dir entweder über Criterias oder über HQL etwas entsprechendes zusammen bauen:
Query abfrage = HibernateUtil.getSession().createQuery("from Nutzer where nachname=:nachname");
abfrage.setString("nachname",nachname);
return (Nutzer) q.uniqueResult();

_________________
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: Mon May 21, 2007 9:46 am 
Newbie

Joined: Wed May 16, 2007 9:55 am
Posts: 8
Danke für die Antwort.

Eine Frage habe ich aber dazu nochmal. Wofür steht denn in diesem Fall das q ?

Code:
return (Nutzer) q.uniqueResult();


Code:
return (Nutzer) abfrage.uniqueResult();


Vielen Dank im Vorraus!


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 22, 2007 4:40 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
oh das war die Macht der Gewohnheit! ^^

das q sollte in diesem Beispiel eher abfrage heissen.

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


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