2011-01-08 7 views
0

wirklich seltsame Situation, die ich hier bekommen habe. Ich habe 2 Klassen.Java, wenn lange nicht funktioniert


@Entity 
public class CategoryData extends EntityData { 
    public Long parentId; 

    @Column(unique=true) 
    public String name; 
    public Picture picture; 
} 

@Entity 
public class PropertyGroupData extends EntityData { 
    public Long categoryId; 
    public String adminDescription; 
    public String title; 
    @ManyToMany(fetch=FetchType.EAGER) 
    public List properties = new LinkedList(); 

} 

dies ist die Entity-Klasse für meine Hibernate.


@MappedSuperclass 
public class EntityData implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long id; 
    @Temporal(TemporalType.TIMESTAMP) 
    public Date created = new Date(); 
    @Temporal(TemporalType.TIMESTAMP) 
    public Date modified = new Date(); 

    public Long version = 0L; 
    // W:waiting,A:active,D:deleted 
    public Character status; 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public String toString() { 
     return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE); 
     //return "EntityData[id=" + id + "]"; 
    } 
} 

kommt hier die Situation. Ich habe einige Daten in meiner Datenbank und es funktioniert gut. bis jetzt.


for(CategoryData c:kategoriler) 
    if(pgd.categoryId.toString().equals(c.id.toString())) 
     out.print("1-find equal "+c.id); 
for(CategoryData c:kategoriler) 
    if(pgd.categoryId==c.id) 
     out.print("2-find equal "+c.id); 

Die erste for-Schleife funktioniert normal und druckt 1-find gleich 7, aber die zweite Schleife druckt nichts. sie beide lang. Was mache ich falsch ?

Antwort

4

Die Ausdrücke sind vom Typ Long, die eine Klasse ist, und werden daher von Referenzidentität verglichen. Wenn sie long wären, wäre es in Ordnung. Versuchen Sie dies stattdessen:

for(CategoryData c:kategoriler) 
    if(pgd.categoryId.longValue() == c.id.longValue()) 
     out.print("2-find equal "+c.id); 
+1

Diese primitiven vs Objektwerte verursachen viel mehr Probleme, als es sein sollte. – Rekin

1

Sie vergleichen 2 Objekte als Referenz. Das heißt, Sie überprüfen, ob es sich um Verweise auf dasselbe Objekt handelt. Was Sie wollen, ist zu überprüfen, ob sie die gleichen Werte haben, z.B.

if(pgd.categoryId.longValue() == c.id.longValue()) 
1

seit langem die .equals überschreibt, können Sie die .equals() -Methode verwenden, wie Sie mit Strings tun.

for(CategoryData c:kategoriler) 
{ 
    if (pgd.categoryId.equals(c.id)) 
    { 
     out.print("2-find equal "+c.id); 
    } 
} 

Mit dem == werden nur die Objektreferenzen verglichen.

Verwandte Themen