【问题标题】:"org.hibernate.exception.SQLGrammarException: could not execute query" on sqlserver but ok on Oracle?sqlserver 上的“org.hibernate.exception.SQLGrammarException:无法执行查询”但在 Oracle 上可以吗?
【发布时间】:2012-07-16 06:04:37
【问题描述】:

将应用程序从 Oracle 移植到 SQLServer。首次尝试访问数据库时出现此错误(org.hibernate.exception.SQLGrammarException: could not execute query)。

这是(省略的)访问代码:-

Session session = serviceLocator.getSessionFactory().openSession();

List<BaseTemplate> baseTemplateList = null;
Query query = null;
try
{       
   query = session.createQuery("from BaseTemplate");
   baseTemplateList = query.list();                   <<<<< Exception thrown here
}
etc

Bean 代码:-

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import com.iontrading.reportserver.database.model.IBaseTemplate;

@Entity
@Table(name = "BASETEMPLATE")
public class BaseTemplate implements IBaseTemplate{

    private Integer id;

    @Column(name="TEMPLATENAME")    
    private String templateName;

@Id 
@GeneratedValue 
@Column(name = "TEMPLATEID")
@Override
/** {@inheritDoc} */
public Integer getId() { return id; }

@Override
/** {@inheritDoc} */
public void setId(Integer id) { this.id = id; } 

...剪辑 } 表创建 DDL 创建表“dbo”。“BASETEMPLATE” ( TEMPLATEID INT PRIMARY KEY NOT NULL, ... 模板名称 VARCHAR(255) )

可能相关或不相关的要点:-

  1. 如果数据库是 Oracle,这可以正常工作。
  2. 表名和bean类名不匹配但使用@Table
  3. 列名与 bean 字段名不匹配但使用@Column
  4. 主键是生成的值。
  5. bean 导入是 JPA 而非休眠。

?为什么我得到这个异常或者我如何从休眠中获取更多信息的任何想法都会非常有用。 谢谢。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    当你使用 JPA 时,查询样式会发生一些变化,比如

    query = session.createQuery("select b from BaseTemplate");
    

    您使用的数据库架构是什么? dbo 是 sql server 的默认架构。所以,最好自己定义一个模式,并在 oracle 和 sql server 中使用它。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2011-10-17
      • 2012-07-04
      • 2021-01-05
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2014-01-01
      相关资源
      最近更新 更多