すべてのプロダクト
Search
ドキュメントセンター

Tablestore:HibernateとSQLを使用したデータクエリ

最終更新日:Jun 10, 2026

Tablestore JDBC ドライバーを Hibernate ORM と統合し、Java アプリケーションで Tablestore のデータをクエリできます。

前提条件

  • AccessKey ペア。RAM ユーザーには、 "Action": "ots:SQL*" 権限が必要です。

  • DDL 操作 を使用して、SQL クエリ用のマッピングテーブルが作成されたデータテーブル。

操作手順

手順 1:JDBC ドライバーのインストール

次のいずれかの方法で JDBC ドライバーをインストールします。

Maven 依存関係

次の依存関係を Maven プロジェクトの pom.xml ファイルに追加します。この例ではバージョン 5.17.0 を使用します。

<dependency>
  <groupId>com.aliyun.openservices</groupId>
  <artifactId>tablestore-jdbc</artifactId>
  <version>5.17.0</version>
</dependency>

手動インストール

Tablestore JDBC ドライバー をダウンロードし、プロジェクトにインポートします。

手順 2:Hibernate のインストール

次のいずれかの方法で Hibernate をインストールします。

Maven 依存関係

次の依存関係を Maven プロジェクトの pom.xml ファイルに追加します。この例ではバージョン 3.6.3.Final を使用します。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.3.Final</version>
</dependency>

手動インストール

Hibernate をダウンロードし、プロジェクトにインポートします。

手順 3:SQL 列のマッピング

Java Bean とマッピング設定ファイルを作成し、Bean のプロパティをテーブルの列にマッピングします。

  1. テーブルの列に対応するプロパティを持つ Java Bean を作成します。

    package hibernate;
    
    public class Trip {
    
        private long tripId;
        private long duration;
        private String startDate;
        private String endDate;
        private long startStationNumber;
        private long endStationNumber;
        private String startStation;
        private String endStation;
        private String bikeNumber;
        private String memberType;
        
        // tripId を例として使用します。他のフィールドも同様です。
        public void setTripId(Long tripId){
            this.tripId = tripId;
        }
        public Long getTripId() {
            return tripId;
        }
    }
  2. hibernate ディレクトリに Trip.hbm.xml ファイルを作成し、次の内容を記述します。このファイルは、Bean のプロパティをテーブルの列にマッピングします。

    重要

    読み取り専用クエリの場合、属性列の insert 属性と update 属性を false に設定することで、Hibernate が書き込みステートメントを生成しないようにします。SQL データ型のマッピングルールについては、「Data type mappings in SQL」をご参照ください。

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <!-- クラス名は、実際のクラス名と一致させてください。 -->
        <class name="hibernate.Trip" table="trips">
            <!-- id 要素で設定したフィールドは、テーブルのプライマリキー列です。 -->
            <id name="tripId" column="trip_id" type="long"/>
            <!-- 読み取り専用クエリの場合、属性列の insert と update を false に設定します。 -->
            <property name="duration" column="duration" type="long" insert="false" update="false"/>
            <property name="startDate" column="start_date" type="string" insert="false" update="false"/>
            <property name="endDate" column="end_date" type="string" insert="false" update="false"/>
            <property name="startStationNumber" column="start_station_number" type="long" insert="false" update="false"/>
            <property name="endStationNumber" column="end_station_number" type="long" insert="false" update="false"/>
            <property name="startStation" column="start_station" type="string" insert="false" update="false"/>
            <property name="endStation" column="end_station" type="string" insert="false" update="false"/>
            <property name="bikeNumber" column="bike_number" type="string" insert="false" update="false"/>
            <property name="memberType" column="member_type" type="string" insert="false" update="false"/>
        </class>
    </hibernate-mapping>

手順 4:SessionFactory の構築

構成ファイルを作成した後、Hibernate の構成を読み込み、SessionFactory を構築します。

  1. 次の内容で hibernate.cfg.xml という名前の Hibernate 構成ファイルを作成します。構成値は実際の値に置き換えてください。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">com.alicloud.openservices.tablestore.jdbc.OTSDriver</property>
            <property name="hibernate.connection.url">jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance</property>
            <property name="hibernate.connection.username">************************</property>
            <property name="hibernate.connection.password">********************************</property>
            <property name="hibernate.connection.autocommit">true</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- マッピング設定ファイルのパスをここに指定します。 -->
            <mapping resource="hibernate/Trip.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    構成プロパティ:

    プロパティ

    必須

    説明

    hibernate.connection.driver_class

    class

    はい

    Tablestore JDBC ドライバーのクラス名です。 com.alicloud.openservices.tablestore.jdbc.OTSDriver に設定します。

    hibernate.connection.url

    string

    はい

    jdbc:ots:endpoint/instanceName 形式の Tablestore インスタンスの URL です。 endpoint をサービスエンドポイントに、 instanceName をインスタンス名に置き換えてください。

    hibernate.connection.username

    string

    はい

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。

    hibernate.connection.password

    string

    はい

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret です。

    hibernate.connection.autocommit

    boolean

    はい

    オートコミットを有効にするかどうかを指定します。

    重要

    Tablestore はトランザクションをサポートしていません。 autocommittrue に設定してください。

    hibernate.dialect

    string

    はい

    SQL ダイアレクトです。Tablestore SQL は MySQL 構文と互換性があるため、 org.hibernate.dialect.MySQLDialect に設定します。

  2. Hibernate 構成ファイルを読み込み、SessionFactory を構築します。

    SessionFactory factory = new Configuration().
      configure("hibernate/hibernate.cfg.xml").
      buildSessionFactory();

手順 5:Session の作成とデータのクエリ

SessionFactory から Session を作成し、 get メソッドを呼び出して、プライマリキーでデータをクエリします。

Session session = factory.openSession();
Trip trip = (Trip) session.get(Trip.class, 99L); 
System.out.println("trip id: " + trip.getTripId());
System.out.println("start date: " + trip.getStartDate());
System.out.println("end date: " + trip.getEndDate());
System.out.println("duration: " + trip.getDuration());
session.close();
factory.close();

完全な例

プライマリキーを使用して 1 行をクエリし、列の値を取得します。次の例では、プライマリキー値 99 を使用します。

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import hibernate.Trip;

public class HibernateDemo {
    public static void main(String[] args) {
        SessionFactory factory = new Configuration().
                configure("hibernate/hibernate.cfg.xml").
                buildSessionFactory();
        Session session = factory.openSession();
        Trip trip = (Trip) session.get(Trip.class, 99L);
        System.out.println("trip id: " + trip.getTripId());
        System.out.println("start date: " + trip.getStartDate());
        System.out.println("end date: " + trip.getEndDate());
        System.out.println("duration: " + trip.getDuration());
        session.close();
        factory.close();
    }
}           

よくある質問

Unable to instantiate default tuplizer

エラーメッセージ:

org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

原因: javassist 依存関係が不足しています。

解決策:

次の依存関係を pom.xml に追加します。

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.15.0-GA</version>
</dependency>

Unknown column '{columnName}' in 'field list'

原因:指定した列が SQL マッピングテーブルに存在しません。

解決策:

  • 列を事前定義列として追加します。列は SQL マッピングテーブルに自動的に同期されます。

  • CREATE TABLE または ALTER TABLE ステートメントを使用して、マッピングテーブルに列を追加します。DDL 操作をご参照ください。