【问题标题】:Hibernate throws SQLGrammarExceptionHibernate 抛出 SQLGrammarException
【发布时间】:2014-08-18 05:01:17
【问题描述】:

实体类是:

@Entity
@Table(name = "movieDetail")
public class MovieDetailImpl implements MovieDetail {

    @Id
    // primary key
    @Column(name = "idmovieDetail")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "cast")
    private String cast;
    @Column(name = "producer")
    private String producer;
    @Column(name = "director")
    private String director;
    @Column(name = "trailer")
    private URL trailer;
    @Column(name = "photo")
    private URL photo;
    @Column(name = "plot")
    private URL plot;
    @Column(name = "desc")
    private String desc;
    @Column(name = "moreDetails")
    private URL moreDetails;

    // Getters/Setters

}

我正在尝试仅设置 castMovieDetail 实体。其余字段为null

Hibernate 抛出以下异常:

014-08-17 21:47:35 INFO TransactionFactoryInitiator:62 - HHH000399: 使用默认事务策略(直接 JDBC 事务)

2014-08-17 21:47:35 信息 ASTQueryTranslatorFactory:47 - HHH000397: 使用 ASTQueryTranslatorFactory

2014-08-17 21:47:36 信息 HibernateTransactionManager:341 - 使用 数据源 [org.springframework.jdbc.datasource.DriverManagerDataSource@1fba434a] HibernateTransactionManager 的 Hibernate SessionFactory

休眠:插入movieDetail(cast, desc, director, moreDetails, 照片,情节,制片人,预告片)值(?,?,?,?,?,?,?,?)

2014-08-17 21:47:36 警告 SqlExceptionHelper:144 - SQL 错误:1064, SQLState: 42000

2014-08-17 21:47:36 错误 SqlExceptionHelper:146 - 你有一个错误 在您的 SQL 语法中;检查与您的 MySQL 对应的手册 在 'desc, director, 附近使用正确语法的服务器版本 moreDetails、照片、情节、制片人、预告片)值('testGetAll' at 第 1 行

2014-08-17 21:47:36 信息 GenericApplicationContext:873 - 关闭 org.springframework.context.support.GenericApplicationContext@40266966: 启动日期 [2014 年 8 月 17 日星期日 21:47:34 PDT];上下文层次结构的根

在我的 'database.properties' 中,我有:

jdbc.dialect=org.hibernate.dialect.MySQL5Dialect

我正在使用 MySQL 社区服务器 5.6.20。而maven的pom.xml中定义的mysql java驱动版本依赖是

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

我这里有什么遗漏吗?

【问题讨论】:

  • 你有一个名为desc的列,而descMySql中的保留作品,换个名字试试。

标签: java mysql hibernate


【解决方案1】:

您有一个名为desc 的列,而desc 是MySql(和许多其他数据库)中的保留作品。

你可以:

  • thisthis,您可以使休眠转义所有列和表名:hibernate.globally_quoted_identifiers=true(在您的persistence.xml 或休眠配置中。
  • 更改列名
  • this,您只能使用以下方法转义此标识符:

@Column(name="\"desc\"")

另外,如果不是遗留数据库,请考虑重命名。

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多