0

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

...snip<> } テーブル作成 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 です。

? この例外が発生する理由、または休止状態からより多くの情報を取得する方法についてのアイデアは非常に役立ちます。ありがとう。

4

1 に答える 1

0

JPA を使用している場合、次のようにクエリ スタイルが少し変わります。

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

使用しているデータベース スキーマは何ですか? dboは、SQL サーバーの既定のスキーマです。したがって、自分でスキーマを定義し、それを oracle と sql サーバーの両方で使用することをお勧めします。

于 2012-07-17T13:52:10.273 に答える