2012-05-30 75 views
0

我有我的查詢返回662行,當它運行使用SQL資源管理器,當我運行它在代碼中使用休眠它返回856行...我嘗試使用一套和擺脫複製這種方式,但顯然沒有任何重複...hibernate返回比預期更多的行

查詢:

String queryString = "FROM AEntity AS A " + 
        "LEFT JOIN A.bEntityAS B " + 
        "WHERE A.INIT||A.NUM IN (:carList) AND A.INIT IN (:initList) AND A.NUM IN (:numberList) " + 
        "AND B.TRUK_AXL_CNT > 0"; 

public class BEntity implements Serializable{ 

    @Id 
    @Column(name = "NUM") 
    private String num; 

    @Id 
    @Column(name = "INIT") 
    private String init; 

    @Column(name = "V_CNT") 
    private Integer vcnt; 
} 

public class AEntity implements Serializable{ 

    @Id 
    @Column(name = "NUM") 
    private String num; 

    @Id 
    @Column(name = "INIT") 
    private String init; 

    @OneToOne 
    @PrimaryKeyJoinColumns({ 
     @PrimaryKeyJoinColumn(name="NUM", referencedColumnName="NUM"), 
     @PrimaryKeyJoinColumn(name="INIT", referencedColumnName="INIT") 
    }) 
    private BEntity bEntity; 
} 
+0

你使用'EAGER'抓取?如果我們能看到你的映射,這將有所幫助。 – bvulaj

+0

即時通訊使用註釋我會添加我的類 – JonH

回答

0

不幸的是沒有其他答案的工作 - 但它確定,無論出於何種原因,當sql explorer返回不正確的結果時,hibernate返回了正確的結果。所有結果集中的兩個字母首字母都被sql explorer取消了...給出了錯誤的結果。

Hibernate是正確的!

0

如果你可以使用Criteria,你可以試試:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)

否則,請嘗試使用DISTINCT關鍵字在你的HQL。

select distinct a from AEntity a...

問題在this文章頂部解釋了一下。

+0

它仍然返回使用標準的856結果...它爆炸說無效的關鍵字附近選擇不同時,我使用DISTINCT – JonH

+0

實際上,我回到了關於標準......你能給我是我的查詢將如何使用條件的示例... – JonH

+0

[doc](http://docs.jboss.org/hibernate/orm/3。3/reference/en/html/querycriteria.html)非常簡單。試一試。 – bvulaj

0

WHERE A.INIT||A.NUM IN (:carList) 

不會做你希望做的事情。

如果你有

INIT = 1, NUM = 34 

一個實體,並與

INIT = 13, NUM = 4 

然後在這兩種情況下表達A.INIT||A.NUM計算結果爲134另一個實體,如果您要查找的實體只有INIT = 1, NUM = 34,那麼你的選擇仍然提取兩個實體。

爲了使這個工作,你必須使用不出現在任何可能的INIT或NUM值的分隔符。讓我們在這個例子中「+」作爲分隔符使用,然後改變你的選擇

WHERE A.INIT || '+' || A.NUM IN (:carList) 

和你在卡洛斯值必須使用相同的分隔符來準備。

+0

init代表初始,所以initial是一個完全的alpha字符串,num是數字字符串...所以它會是AAAA 0000000000是它的樣子......並且在carlist中有些東西看起來像AAAA0000000000 – JonH

+0

OK,如果INIT從來沒有一個數字和NUM總是純數字,然後它的工作。但是我從你的codelet看不到: - 它可能是你問題的根源。 – Johanna

相關問題