這裏是我的問題:休眠加入時間太長工作
我有這個類有幾個@oneToMany
收藏
public class ActivePropertyList implements Serializable
{
@OneToMany
@JoinTable(name = "PropertyAttributeLink",
joinColumns =
@JoinColumn(name = "EANHotelID"),
inverseJoinColumns =
@JoinColumn(name = "AttributeID", referencedColumnName="AttributeID"))
private Collection<AttributeList> attributeList;
@OneToMany(fetch= FetchType.LAZY)
@JoinColumn(name="EANHotelID")
private Collection<Hotelimageslist> hotelimageslist;
@OneToMany(fetch= FetchType.LAZY)
@JoinColumn(name="EANHotelID")
private Collection<Roomtypelist> roomtypelist;
//Getters & Setters ...
當我從XHTML訪問該對象時間過長,產生正如我使用<ui:repeat value=#{controller.ActivePropertyList.attributeList}>
...
PropertyAttributeLink有超過5MIL行和圖像有超過4MIL行,但是當我使用簡單的SQL查詢innerJoin我不會超過幾個小時生成吃了清單。
我試過在AttributeList上使用HQL查詢使用namedQuery,但由於AttributeList沒有引用ActivePropertyList,因爲它是單向的,所以它會拋出錯誤。
有沒有辦法創建HQL NamedQuery來訪問每個列表一次,並將其存儲在控制器中?
像
public List<AttributeList> getAttributeListByHotelID(int hotelID){
Query q = session().createQuery("from AttributeList AL inner join PropertyAttributeLink PA where PA.hotelID=:hotelID");
return q.list();
}
,但這種方法並不爲HQL工作需要的AttributeList瞭解PropertyAttributeLink