hibernate生成错误的sql“从my_table中选择max(id)”

时间:2012-09-14 08:50:19

标签: mysql sql hibernate code-generation

我用Hibernate做了很少的应用程序。只是从HB网站提供的样本。

Hibernate对DB说:

drop table if exists some_db.my_table 

create table some_db.my_table ......

select max(id) from my_table 

当我从HSQL db转到MySQL时。

我有错误 “DEBUG ohejdbc.spi.SqlExceptionHelper - 您的SQL语法中有错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行[n / a]的'my_table'附近使用正确的语法”

因为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>

但也没有帮助。

更改连接(标准“root”/“”访问权限),如

jdbc:mysql://localhost:3306/some_db 

而不是

jdbc:mysql://localhost:3306

也无济于事。

它似乎是一个错误,但是什么是解决方案?

2 个答案:

答案 0 :(得分:2)

您确实需要发布带注释的实体/ hibernate XML映射。

最可能的原因是您未在table annotation中指定架构属性。

即。

的内容
@Table(schema="some_db")

答案 1 :(得分:0)

您可以使用架构参数:

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