2012-09-14 54 views
4

我做的小應用程序與Hibernate。只是從HB網站提供的樣本。休眠生成SQL錯誤 「選擇MY_TABLE MAX(ID)」

休眠說要DB:

drop table if exists some_db.my_table 

create table some_db.my_table ...... 

select max(id) from my_table 

當我從HSQL轉分貝到MySQL。

我有錯誤 「DEBUG ohejdbc.spi.SqlExceptionHelper - 您的SQL語法錯誤;請查看與您的MySQL服務器版本相對應的手冊,以獲得在第1行'my_table'附近使用的正確語法[N/A]」

因爲HB頑固地試圖說

select max(id) from my_table 

代替

select max(id) from some_db.my_table 

這是正確的語法時它涉及到

public void testBasicUsage() { 
    // create a couple of events... 
    Session session = sessionFactory.openSession(); 
    session.beginTransaction(); 
    session.save(new Event(.....)); // <<-------------------HERE 
    session.save(new Event(.....)); 
    session.getTransaction().commit(); 
    session.close(); 

和改變方言沒有幫助。

我已經嘗試切換到不同的HB版本​​,例如

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.1.6.Final</version> 
</dependency> 

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.21</version> 
</dependency> 

,但它並不能幫助了。

改變連接(標準的 「根」/ 「」 訪問)等

jdbc:mysql://localhost:3306/some_db 

代替

jdbc:mysql://localhost:3306 

也沒有幫助。

這似乎是一個錯誤,但是這將是一個解決方案嗎?

+0

實體被宣佈是這樣的: @Entity @Table(name = 「事件」,模式= 「some_db」) – WebComer

+0

實體聲明如下: @ Entity @Table(name =「my_table」,schema =「some_db」) – WebComer

回答

2

你真的需要張貼您註明實體/ Hibernate XML映射這一點。

最可能的原因是,你還沒有指定在table annotation架構屬性。

I.e.沿

@Table(schema="some_db") 
+0

yes,i did。正如我在我的post-drop表中所說的,如果存在some_db.my_table create table some_db.my_table ...... 從my_table中選擇max(id),並且只有最後一個沒有模式/數據庫名稱。 – WebComer

0

您可以使用模式參數線的東西:

<generator class="increment"> 
    <param name="schema">some_db</param> 
</generator>