2013-05-09 94 views
0

我有一個用例來顯示使用完整實體中值的子集的實體列表。我採取的方法是創建一個只有這些字段出現在列表中的EntityList類。這個類映射到與完整實體相同的表,但只有一部分字段。加入HQL標準

使用HQL,我想過濾基於完整實體中的字段返回的EntityList。在下面的例子中,我想EntityList在Entity的描述字段(它在表中,但不在EntityList類中)過濾。

public interface IThreePhaseMotorList { 
abstract public Long getId(); 
abstract public String getMfg(); 
abstract public Double getPowerUnits(); 
abstract public Integer getPoles(); 
} 

public interface IThreePhaseMotor extends IMotor { 
public abstract Long getId(); 
public abstract void setId(Long id); 
public abstract Integer getVersion(); 
public abstract void setVersion(Integer version); 
public abstract String getIdsrc(); 
public abstract void setIdsrc(String idsrc); 
public abstract String getDescription(); 
public abstract void setDescription(String description); 
public abstract String getManufacturer(); 
public abstract void setManufacturer(String manufacturer); 
public abstract Integer getPoles(); 
public abstract setPoles(Integer poles); 
} 

如果我直接寫SQL語句對錶它看起來像:

Select IThreePhaseMotorList.* 
    from IThreePhaseMotorList JOIN IThreePhaseMotor ON 
     IThreePhaseMotorList.id = IThreePhaseMotor.id 
    where IThreePhaseMotor.Description like 'test%'; 

反正有沒有做到這一點的HQL?

回答

1

我採取的方法是創建一個只有這些字段出現在列表中的EntityList類。這個類映射到與完整實體相同的表,但只有一部分字段。

這是問題的根源。不要這樣做。只需使用完整的實體進行查詢。加載一些不需要的列通常不會對性能產生任何重大影響。如果是這樣,那麼只需執行一個只選擇你想要的列的查詢。

+0

感謝您的建議。它確實會影響性能,因爲結果集是通過Web服務發送的,並且必須編入/編出XML。我不想在SQL中編寫查詢,因爲這需要大量維護列映射的代碼,因此我的問題。 – 2013-05-09 14:05:37

+0

您不必強制從Web服務返回實體列表。您可以簡單地將查詢返回的每個實體實例轉換爲一個DTO對象,該對象只包含要編組並從Web服務返回的數據。我在哪裏推薦SQL? HQL可用於返回屬性,而不僅僅是實體:例如,從Foo foo加入foo.bar欄中選擇foo.id,bar.name。參見http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-select – 2013-05-09 14:12:50