0
順序設置我明白,如果我用冬眠如何在HQL
class Fund{
private Set<FundClass> fundClasses = new LinkedHashSet<FundClass>();
@org.hibernate.annotations.OrderBy(clause="order asc")
public Set<FundClass> getFundClasses() {
return fundClasses;
}
}
然後我FundClasses會爲了,因爲背後有李宗紅,休眠使用linkedHashset。同時,如果我想by子句中HQL使用順序如
from fund f inner join fetch f.fundClass fc order by fc.name
雖然SQL中我想要的順序返回記錄,設置,不是我這個迭代器來它,即使我把它定義爲linkedHashset 。我有幾個疑問,基金類別需要以不同的順序。有時候可以通過名字,某些時候通過訂單和其他一些屬性,我希望我可以在數據庫而不是內存中進行排序。我該怎麼做呢?
@Entity
@Table(name="GP")
public class GP {
private Integer id;
private String name;
private List<P> ps;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy="gp")
public List<P> getPs() {
return ps;
}
public void setPs(List<P> ps) {
this.ps = ps;
}
}
@Entity
@Table(name="P")
public class P {
private Integer id;
private String name;
private GP gp;
private List<C> cs;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne
public GP getGp() {
return gp;
}
public void setGp(GP gp) {
this.gp = gp;
}
@OneToMany(mappedBy="p")
public List<C> getCs() {
return cs;
}
public void setCs(List<C> cs) {
this.cs = cs;
}
}
@Entity
@Table(name="C")
public class C {
private Integer id;
private String name;
private P p;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne
public P getP() {
return p;
}
public void setP(P p) {
this.p = p;
}
}
查詢我跑
sessionFactory.getCurrentSession().createQuery("select gp from GP gp inner join fetch gp.ps p inner join fetch p.cs c where c.age< 5 and gp.name like 'john%'").list();
我不認爲我可以使用一個列表,使用列表返回一些重複的,並且使用列表我有不能同時得到多個包的錯誤。 – Nan
你可以解決這兩個問題。但是我仍然不明白你是如何從HQL查詢中獲得Set的。你能告訴我代碼嗎? – Bozho
讓我解釋一下我正在嘗試做什麼,我不太確定這個好方法。我有grandParent,父母和孩子,(所有一對多),以顯示過濾familiy樹,我有這樣的查詢從grandPanent gp內部連接gp.parent內部連接p.child c選擇gp其中gp.name像'約翰%'和p.child.age <5。我想這個返回給我一個grandParent列表。我編輯問題,以便您可以看到代碼。 – Nan