2015-11-03 99 views
0

返回行我想要做如下:子查询的HQL

INSERT INTO Table0(value1, value2) 
SELECT 
    (SELECT t1.something1 FROM Table1 t1 WHERE t1.id = :t1id), 
    (SELECT max(t2.something2) FROM Table2 t2 WHERE t2.some = :t2Some) 
FROM Table1, Table2 

但休眠抱怨,我想插入实体(表1)作为字符串(值)。它看起来像HQL中的子查询返回实体而不是列值。我可以强迫它不这样做吗?

我知道,我可以这样做:

INSERT INTO Table0(value1, value2) 
SELECT t1.something1, max(t2.something2) FROM Table1 t1, Table2 t2 WHERE ... 

,但它产生的Oracle SQL不好,因为在SELECT HIBERNATE_SEQUENCE.NEXTVAL和Oracle不允许这样做。

+0

是否有必要在Hibernate中做到这一点?即使你找到了方法,下次你需要重构它,你也面临类似的问题。 – ibre5041

+0

这是必要的,因为我想使用不同的数据库引擎用于我的应用程序的不同部署。 – jaskmar

回答

0

它看起来像第一个查询现在工作,也许它是关于休眠版本。