2012-10-05 77 views
12

我在閱讀Hibernate HQL教程,發現HQL不支持INSERT INTO..VALUES..,但支持INSERT INTO..SELECT..,即HQL只支持從其他表插入數據。在Hibernate中使用HQL在一張表中插入數據

假設我想在一個表中插入相同的值,並且該數據不是來自任何其他表,即該值不在任何其他表中。那麼如何在HQL中做到這一點?

另外,想知道HQL中這種限制的理由嗎?

+0

不明白誰低估了這個問題?不管誰,請讓我知道原因,這樣我可以在將來照顧 – Anand

+0

我不downvoter,但我認爲你應該讀這個:http://stackoverflow.com/faq#dontask – user1516873

回答

7

如果數據來自另一個表,則不需要使用hql來插入。

只需獲取對您的實體的引用,獲取Hibernate會話,並調用save()。

根據http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html#d0e2116

僞語法INSERT語句

INSERT INTO實體名稱properties_list和select_statement中

只有INSERT INTO ... SELECT ...形式支持的。您不能指定顯式值來插入。

+2

我在問如何在HQL中的表中插入數據。 注意:要插入的數據不是來自其他表格。 – Anand

+0

我爲插入添加了hibernate文檔。 – swemon

+0

感謝您的澄清 – Anand

3

Hibernate是一個ORM框架(對象關係映射)。

它的工作是你給它的對象(實體),他管理存儲(通過Session.save(),IIRC)。

因此,您不使用HQL來插入新記錄,而是使用ORM方法。另一方面,這是一個猜測),因爲從表中加載實體,將它們複製到其他實體並逐一存儲它們,HQL提供了一個捷徑,用於DB中的SQL用於性能目的的具體操作。

+0

我知道使用會話。保存()我可以做同樣的事情,但只是想知道如何插入數據(不是從任何其他表)使用HQL的表。 – Anand

+1

該框架的提供者說你不能那樣做。你知道一個替代方案,並給出它的基本原理。然而,你只是說你想這樣做......至少,我們很幸運,你是一名程序員而不是飛機駕駛員。如果您只想使用SQL,請使用SQL而不使用Hibernate。 – SJuan76

+0

我從來沒有說我想這樣做,我只是問我們是否可以做到這一點或不.. ..我希望你明白不同之處.. – Anand

1

您可以使用session.save(object)將數據插入表中。