-->
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.  [ 6 posts ] 
Author Message
 Post subject: null-pointer-exception bei Boolean-Objekten
PostPosted: Wed Feb 01, 2006 5:01 am 
Newbie

Joined: Wed Feb 01, 2006 4:44 am
Posts: 2
ich arbeite nun schon einige zeit mit hibernate, und kam nun letzte woche zu einer fehlermeldung, welche für mich nicht nachvollziehbar ist, da ich ähnlichen code an einer anderen stelle bereits verwendet habe und er dort funktioniert.

ich habe eine klasse "AufgabeStatus"

Code:
public class AufgabeStatus implements IPersistableObject {
   
   Integer id;
   String bezeichnung;   
   Boolean geschlossen;
   
   public String getBezeichnung() {
      return bezeichnung;
   }
   
   public void setBezeichnung(String bezeichnung) {
      this.bezeichnung = bezeichnung;
   }
   
   public Integer getId() {
      return id;
   }
   
   public void setId(Integer id) {
      this.id = id;
   }

   public Boolean isGeschlossen() {
      return geschlossen;
   }

   public void setGeschlossen(Boolean geschlossen) {
      this.geschlossen = geschlossen;
   }
}



und eine zweite klasse "ProjektStatus" :

Code:

public class ProjektStatus implements IPersistableObject {

   Integer id;
   String bezeichnung;
   Boolean geschlossen;
   
   public String getBezeichnung() {
      return bezeichnung;
   }

   public Integer getId() {
      return id;
   }

   public void setBezeichnung(String string) {
      bezeichnung = string;
   }

   public void setId(Integer integer) {
      id = integer;
   }

   public Boolean isGeschlossen() {
      return geschlossen;
   }

   public void setGeschlossen(Boolean geschlossen) {
      this.geschlossen = geschlossen;
   }

}



instanzen beider klassen werden in Objekten der Klassen "Aufgabe" und "Projekt" gehalten. im hibernate-mapping ist lazy="true". das mapping sieht bei aufgabe und projekt bis auf die bezeichnungen komplett gleich aus.

Code:
        Projekt project = loader.loadProjektById(form.getProject());
        ProjektStatus ps = project.getStatus();
        if (ps == null || ps.isGeschlossen()) {
          ...
        }

        AufgabeStatus as = task.getStatus();
        if (as == null || as.isGeschlossen()) {
         ...
       }


die werte in der datenbank sehen im testlauf so aus, dass bei beiden objekten (as und ps) im attribute "geschlossen" der wert false steht.
bei ps.isGeschlossen() erhalte ich ein boolean-objekt mit wert false, bei as.isGeschlossen() erhalte ich jedoch null. ändere ich in der datenbank den wert auf true, so erhalte ich auch hier ein boolean-objekt mit wert true.

was kann man machen, damit ich auch einen wert für false empfange, wie bei projektstatus?


vielen dank für alle antworten, die mir weiterhelfen könnten.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 01, 2006 9:45 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Du wirst Dein mapping posten müssen und den Quellkode zum lesen oder schreiben der Einträge.

Wahrscheinlich ist nur irgendwo ein Schreibfehler im Mapping.

Gruß Sebastian

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 01, 2006 12:56 pm 
Newbie

Joined: Wed Aug 03, 2005 11:04 am
Posts: 10
Ich würde mal vermuten dass Du bei einem Objekt vorher einen Wert gesetzt hast und beim anderen nicht. Datenbanken kennen eben auch den Zustand "null". Da Du nun ein Boolean-Objekt verwendest (anstatt einem boolean-Primitiv) kann dieses eben auch null sein.

Versuche doch bei der Deklaration der Variablen gleich "= new Boolean(false)" dazu zu schreiben. Hilft das?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 5:04 am 
Newbie

Joined: Wed Feb 01, 2006 4:44 am
Posts: 2
ich schreibe die werte manuell mit einem db-tool in die db. die werte sind fix gesetzt. im code wird das objekt direkt geladen, ohne dass wertänderungen vorgenommen werden.

das mapping ist auch korrekt. vor allem ist es komplett gleich wie bei projektstatus und dort funktioniert alles.

lg
andreas


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 5:13 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Hallo Andreas,

wir glauben eben, dass die nicht gleich sind. Wenn es ohne Relationen nach wie vor nicht funktioniert, dann ist irgendwo ein kleiner Fehler.
Egal wo im Java code oder im Mapping.

Gruß Sebastian

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject: Re: null-pointer-exception bei Boolean-Objekten
PostPosted: Fri Feb 10, 2006 9:03 am 
Beginner
Beginner

Joined: Thu Nov 25, 2004 7:07 am
Posts: 43
Location: Germany
letti4493 wrote:
was kann man machen, damit ich auch einen wert für false empfange, wie bei projektstatus?


Vergib doch einfach für Deine Boolean Felder default Werte. Gerade bei denen ist das eindeutig. Wenn nichts gesetzt wird, setze sie Boolean.FALSE, wenn true gesetzt wird, änderst Du den Wert entsprechend.

Das hat den Vorteil, dass immer was korrektes in der DB steht und Du kein langes rumprüfen auf NULL oder nicht NULL hast.

Wenn Dein Feld 3 Zustände haben kann, NULL, TRUE, FALSE denke ich, dass Boolean der falsche Typ ist für Dein Feld.

Axel

_________________
You'll never get a second chance to make a first impression!


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