2012-07-17 20 views
0

將應用程序從Oracle移植到SQLServer。第一次訪問數據庫時發生此錯誤(org.hibernate.exception.SQLGrammarException:無法執行查詢)。「org.hibernate.exception.SQLGrammarException:無法執行查詢」在sqlserver上但在Oracle上沒問題?

這是(消隱)訪問的代碼: -

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 CREATE TABLE「DBO 「。」BASETEMPLATE「 ( TEMPLATEID INT PRIMARY KEY NOT NULL, ... TEMPLATENAME VARCHAR(255) )

點,可能會或可能不相關: -

  1. 這工作正常,如果數據庫是Oracle。
  2. 表名和bean類的名稱不匹配,但使用@Table
  3. 列名不匹配的bean字段名稱,但使用@Column
  4. 主鍵是一個生成的值。
  5. 該bean的導入是JPA不休眠。

?任何想法,爲什麼我得到這個異常,或者我如何從休眠獲得更多信息將是非常有用的。 謝謝。

回答

0

當您使用JPA,查詢樣式修改了一下,像

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

什麼是你正在使用的數據庫模式? dbo是sql服務器的默認模式。所以,最好是定義一個你自己的模式,並將它用於oracle和sql server。

相關問題