@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();
}
这是我的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 + "]";
}
}
情况来了。我在我的数据库中获得了一些数据并且效果很好。直到现在。
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-find equal 7但第二个循环不打印任何东西。他们都很长。我做错了什么?
答案 0 :(得分:4)
表达式为Long
类型,它是一个类,因此通过引用标识进行比较。如果他们是long
,那就没问题。试试这个:
for(CategoryData c:kategoriler)
if(pgd.categoryId.longValue() == c.id.longValue())
out.print("2-find equal "+c.id);
答案 1 :(得分:1)
您正在通过引用比较2个对象。也就是说,您正在检查它们是否是对同一对象的引用。你想要的是检查它们是否具有相同的值,例如
if(pgd.categoryId.longValue() == c.id.longValue())
答案 2 :(得分:1)
由于Long会覆盖.equals,因此您可以使用.equals()方法,就像使用字符串一样。
for(CategoryData c:kategoriler)
{
if (pgd.categoryId.equals(c.id))
{
out.print("2-find equal "+c.id);
}
}
使用==只比较对象引用。