2011-01-08 60 views
0

真奇怪的情况我到了这里。我有2个班。java如果长时间不工作


@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(); 

} 

这是我的休眠实体类。


@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 + "]"; 
    } 
} 

这里是情况。我在我的数据库中获得了一些数据,它运行良好。到现在。


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); 

第一个for循环正常工作,打印1找到相等7但第二个循环不打印任何东西。他们都是龙的。我究竟做错了什么 ?

回答

4

表达式是Long,这是一个类,因此通过参考标识进行比较。如果他们是long,那就没问题。试试这个:

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

那些原始的vs对象值引起的问题比应该的要多得多。 – Rekin 2011-01-08 18:43:02

1

您正在通过引用比较2个对象。也就是说,你正在检查它们是否是对同一对象的引用。你想要的是检查它们是否具有相同的值,例如

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

长期以来覆盖.equals,你可以使用.equals()方法,就像你用绳子做的。

​​

使用==只是比较对象引用。