mysql - hibernate生成错误的sql "select max(id) from my_table"

标签 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 时。

我有错误 “调试 o.h.e.jdbc.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>

但这也无济于事。

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

jdbc:mysql://localhost:3306/some_db 

而不是

jdbc:mysql://localhost:3306

也无济于事。

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

最佳答案

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

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

即类似于

@Table(schema="some_db")

关于mysql - hibernate生成错误的sql "select max(id) from my_table",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421043/

相关文章:

sql - HIVE-QL 中的 LEAD 函数语法

mysql - 从第二个表 INNER JOIN 返回 2 行

Java/J2EE 内部服务器错误

spring - 如何 Autowiring 另一个项目中的类

java - 在 Hibernate 中处理环境特定字段的最佳方法

php - 在 PHP 中为什么它只回显最后一项而且我知道在数组中它不止一个

mysql - Mysql存储过程中如何创建游标

java - 为具有多个页面的Java应用程序创建可执行文件

java - 在 Java 中从 MySQL 获取不同的行

c# - 存储过程问题