2012-10-08 38 views
0

我有一個用戶DAO休眠給出兩行相同的,而不是兩個不同的行

@Entity 
@Table(name="EBIGUSERTIM") 
public class EbigUser { 


private String id; 
private Integer source; 
private String entryscheme; 
private String fullName; 
private String email; 

private Long flags; 
private String status; 
private String createdBy; 
private Date createdStamp; 
private String modifiedBy; 
private Date modifiedStamp; 

@Id 
@Column(name="ID") 
public String getId() { 
    return id; 
} 
public void setId(String id) { 
    this.id = id; 
} 
@Id 
@Column(name="SOURCE") 
public Integer getSource() { 
    return source; 
} 
public void setSource(Integer source) { 
    this.source = source; 
} 
@Column(name="ENTRYSCHEME") 
public String getEntryscheme() { 
    return entryscheme; 
} 
public void setEntryscheme(String entryscheme) { 
    this.entryscheme = entryscheme; 
} 
@Column(name="FULLNAME") 
public String getFullName() { 
    return fullName; 
} 
public void setFullName(String fullName) { 
    this.fullName = fullName; 
} 
@Column(name="EMAIL") 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 
@Column(name="FLAGS") 
public Long getFlags() { 
    return flags; 
} 
public void setFlags(Long flags) { 
    this.flags = flags; 
} 
@Column(name="STATUS") 
public String getStatus() { 
    return status; 
} 
public void setStatus(String status) { 
    this.status = status; 
} 
@Column(name="CREATEDBY") 
public String getCreatedBy() { 
    return createdBy; 
} 
public void setCreatedBy(String createdBy) { 
    this.createdBy = createdBy; 
} 
@Column(name="CREATEDSTAMP") 
public Date getCreatedStamp() { 
    return createdStamp; 
} 
public void setCreatedStamp(Date createdStamp) { 
    this.createdStamp = createdStamp; 
} 
@Column(name="MODIFIEDBY") 
public String getModifiedBy() { 
    return modifiedBy; 
} 
public void setModifiedBy(String modifiedBy) { 
    this.modifiedBy = modifiedBy; 
} 
@Column(name="MODIFIEDSTAMP") 
public Date getModifiedStamp() { 
    return modifiedStamp; 
} 
public void setModifiedStamp(Date modifiedStamp) { 
    this.modifiedStamp = modifiedStamp; 
} 

我正在選擇出來的分貝的2行。 sql works

select * from ebigusertim where id='blah' 

它返回2個不同的行。當我使用hibernate查詢數據時,似乎沒有爲列表中的每個條目分配對象內存。因此,我得到了與同一個對象的列表中的2個條目。

 Criteria userCriteria = session.createCriteria(EbigUser.class); 
     userCriteria.add(Restrictions.eq("id", id)); 
     userlist = userCriteria.list(); 
+0

請爲您的問題選擇一個更好的標題,標題中的「問題」被禁止使用堆棧溢出,並且設法潛入其中的唯一原因是因爲您對程序員提出此問題,如果您嘗試過,系統會自動拒絕在Stack Overflow上詢問這個問題。一個更具描述性的標題將幫助您獲得更好的答案,並儘可能針對實際問題制定標題。而當你處理它時,你的代碼格式有幾個問題,我試圖修復它們,但由於標題中的「問題」而無法提交編輯。請修復這些問題。謝謝。 – yannis

+0

根據您的唯一列組合合適地重寫equals和hashcode方法 –

回答

1

你爲什麼要定義兩個id列(包括idsource映射與註釋@Id)?

@Id 
    @Column(name="ID") 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    @Id 
    @Column(name="SOURCE") 
    public Integer getSource() { 
     return source; 
    } 

請刪除一個,如果是錯誤的。如果兩者一起製造composite key,則相應地映射它們,例如,

@Embeddable 
    public class UserPK implements Serializable { 

    @Column(name = "ID", nullable = false) 
    private String id; 

    @Column(name = "SOURCE", nullable = false) 
    private Integer source; 

    ..... 
    ..... 
    } 


Use this new class in you original class as Id as below: 

    @EmbeddedId 
    private UserPK userPK; 

希望這會有所幫助。

+0

我添加了第二列,因爲唯一性在id和source上。我最初使用的只是身份證,我得到了相同的結果。第二個ID註釋似乎並不重要。我確實看到了像你這樣放置的複合鍵的例子。我會補充一點。由於我是hibernate的新手,你認爲這會解決我的問題嗎? – sydncall

+0

單向或雙向。如果'source'是主鍵,則從'getId()'中移除'@ Id'註釋。如果兩個字段一起是組合鍵,則使用組合鍵映射。 –

+0

我創建了組合鍵(Embeddable和EmbeddedId)並解決了我的問題。謝謝您的幫助! – sydncall

相關問題