Hibernate 生成了错误的 SQL,"select max(id) from my_table"。

4

我用Hibernate做了一个小应用程序,仅仅参考了Hibernate网站上提供的示例代码。

Hibernate向数据库发送以下请求:

drop table if exists some_db.my_table 

create table some_db.my_table ......

select max(id) from my_table 

当我从HSQL数据库转换到MySQL时,出现了错误。

我遇到了以下错误:"DEBUG o.h.e.jdbc.spi.SqlExceptionHelper - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'my_table' at line 1 [n/a]"

这是因为Hibernate(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

这似乎是一个bug,但有什么解决方案吗?

也许可以尝试重新安装或更新相关软件版本。


实体声明如下:@Entity @Table(name = "Event", schema = "some_db") - WebComer
实体被声明为这样:@Entity @Table( name = "my_table", schema = "some_db") - WebComer
2个回答

2
“你真的需要发布你的带注释实体/hibernate XML映射文件。”
“最有可能的原因是你没有在表格注解中指定模式属性。”
“例如,类似于以下内容:”
@Table(schema="some_db")

是的,我做了。就像我在帖子中说的那样 - 如果存在,则删除表some_db.my_table创建表some_db.my_table ......从my_table中选择max(id),并且始终不带模式/数据库名称的最后一个。 - WebComer

0
你可以使用 schema 参数:
<generator class="increment">
    <param name="schema">some_db</param>
</generator>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接