“org.hibernate.exception.SQLGrammarException:无法在sqlserver上执行查询”但是在Oracle上没问题?

时间:2012-07-17 10:19:02

标签: hibernate

我将应用程序从Oracle移植到SQLServer。第一次尝试访问数据库时会发生此错误(org.hibernate.exception.SQLGrammarException:无法执行查询)。

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

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; } 

...剪断&LT;&GT;     } 表创建DDL 创建表“dbo”。“BASETEMPLATE” (    TEMPLATEID INT PRIMARY KEY NOT NULL,    ...    TEMPLATENAME VARCHAR(255) )

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

  1. 如果数据库是Oracle,这可以正常工作。
  2. 表名和bean类名不匹配,但使用@Table
  3. 列名称与bean字段名称不匹配,但使用@Column
  4. 主键是生成的值。
  5. bean的导入是JPA而不是休眠。
  6. ?任何想法为什么我得到这个异常或如何从hibernate获取更多信息将是非常有用的。 感谢。

1 个答案:

答案 0 :(得分:0)

当您使用JPA时,查询样式会稍微改变,例如

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

您使用的数据库架构是什么? dbo是sql server的默认架构。因此,更好地定义自己的模式并将其用于oracle和sql server。