我想在我的數據庫(MySQL V5.1.61)中實現一個標記系統,然後在休眠狀態下工作。這裏是我的數據庫中的相關部分: 在Hibernate中使用註解標記系統
而且包含的數據:
如果我正確地這樣做,那麼 'NIR' 應該有3個與他相關的標籤,'食物','Sorority'和'暑期實習'。
什麼我有正在實施的休眠這種關係(使用註釋)麻煩:
的UserHibernate類(我使用GWT所以我需要獨立的休眠和DTO對象):
@Entity
@Table(name="user")
public class UserHibernate implements Serializable{
private int ID;
//removed fields for brevity
private Set<UserTagsHibernate> tags;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "uID")
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
/**
* @return the tags
*/
@OneToMany(mappedBy="user", fetch=FetchType.EAGER)
public Set<UserTagsHibernate> getTags() {
return tags;
}
/**
* @param tags the tags to set
*/
public void setTags(Set<UserTagsHibernate> tags) {
this.tags = tags;
}
}
的UserTagsHibernate類別:
@Entity
@Table(name="usertags")
public class UserTagsHibernate {
private int usertagsID;
private UserHibernate user;
private TagsHibernate tags;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="userforeignkey")
public UserHibernate getUser() {
return user;
}
public void setUser(UserHibernate userHibernate) {
this.user = userHibernate;
}
@OneToOne
@JoinColumn(name="tagforeignkey")
public TagsHibernate getTags() {
return tags;
}
public void setTags(TagsHibernate tagsHibernate) {
this.tags = tagsHibernate;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "usertagsID")
public int getUsertagsID() {
return usertagsID;
}
public void setUsertagsID(int usertagsID) {
this.usertagsID = usertagsID;
}
}
的TagsHibernate類別:
@Entity
@Table(name = "tags")
public class TagsHibernate {
private int tagID;
//removed for brevity
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "tagID")
public int getTagID() {
return tagID;
}
public void setTagID(int tagID) {
this.tagID = tagID;
}
}
我遇到的問題是,當我嘗試檢索用戶時,這裏'nir',他出現了三次。我相信這是因爲他有3個標籤,所以出於某種原因,當我發出查詢「session.createCriteria(UserHibernate.class).add(Restrictions.eq(」username「,」nir「))。list(); 「我得到一個長度列表3.任何想法,爲什麼發生這種情況?
非常感謝!這是一種討厭,雖然... –
我不能同意你更多!我真的很喜歡Criteria API的想法,但是我幾乎總是最終使用HQL來代替這個問題......要記得告訴Hibernate做預期的事情,感覺非常不好意思。 – stevevls