Hibernate は、Java 環境向けのオブジェクト/リレーショナルマッピング(ORM)ソリューションです。 Hibernate を使用して Tablestore 用の Java Database Connectivity(JDBC)ドライバーを使用することで、Tablestore にアクセスできます。
背景情報
Hibernate は、Java 環境向けのオブジェクト/リレーショナルマッピング(ORM)ソリューションです。 Hibernate を使用すると、Java クラスをデータベーステーブルにマッピングしたり、Java データ型を SQL データ型にマッピングしたり、データをクエリしたりできます。 Hibernate は、SQL および JDBC で手動でデータを処理するのに費やされる開発時間を大幅に短縮できます。 詳細については、「Hibernate ドキュメント」をご参照ください。
注意事項
SQL クエリ機能は、中国(杭州)、中国(上海)、中国(北京)、中国(張家口)、中国(ウランチャブ)、中国(深セン)、中国(成都)、中国(香港)、日本(東京)、シンガポール、マレーシア(クアラルンプール)、英国(ロンドン)、米国(シリコンバレー)、インドネシア(ジャカルタ)、ドイツ(フランクフルト)、SAU(リヤド - パートナーリージョン)、および米国(バージニア)でご利用いただけます。
前提条件
RAM ユーザーとしてデータをクエリする場合、RAM ユーザーが作成され、すべての SQL 操作権限が RAM ユーザーに付与されます。 RAM ユーザーにアタッチされているカスタムポリシーで
"Action": "ots:SQL*"を構成することで、すべての SQL 操作権限を RAM ユーザーに付与できます。 詳細については、「RAM ポリシーを使用して RAM ユーザーに権限を付与する」をご参照ください。AccessKey ID と AccessKey シークレットで構成される AccessKey ペアを取得します。 詳細については、「AccessKey ペアを作成する」をご参照ください。
データテーブルを作成し、データテーブルのマッピングテーブルを作成します。 詳細については、「手順 3:データテーブルを作成する」および「テーブルのマッピングテーブルを作成する」をご参照ください。
手順
手順 1:JDBC ドライバーをインストールする
JDBC ドライバーは、次のいずれかの方法でインストールできます。
Tablestore 用の JDBC ドライバーをダウンロードし、プロジェクトにインポートします。 ダウンロードパスについては、「Tablestore 用 JDBC ドライバー」をご参照ください。
Maven プロジェクトに依存関係を追加します。
Maven で Tablestore 用 JDBC ドライバーを使用するには、対応する依存関係を pom.xml ファイルに追加するだけです。 この例では、JDBC ドライバー 5.17.0 を使用しています。 <dependencies> に次のコンテンツを追加します。
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore-jdbc</artifactId> <version>5.17.0</version> </dependency>
手順 2:Hibernate をインストールする
Hibernate は、次のいずれかの方法でインストールできます。
Hibernate インストールパッケージ hibernate-core-x.x.x.jar をダウンロードし、プロジェクトにインポートします。 ダウンロードパスについては、「Hibernate インストールパッケージ」をご参照ください。
hibernate-core-x.x.x.jar では、
x.x.xは Hibernate のバージョン番号を示します。 ビジネス要件に基づいて、Hibernate インストールパッケージをダウンロードしてください。Maven プロジェクトに依存関係を追加します。
Maven で Hibernate を使用するには、対応する依存関係を pom.xml ファイルに追加するだけです。 この例では、3.6.3.Final バージョンを使用しています。 <dependencies> に次のコンテンツを追加します。
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.3.Final</version> </dependency>
手順 3:SQL フィールドをマッピングする
データテーブルのフィールド名と同じ名前のメンバー変数を含む Java Bean を作成した後、マッピング構成ファイルを作成して、Java Bean のメンバー変数をデータテーブルのフィールドにマッピングします。
データテーブルのフィールド名と同じ名前のメンバー変数を含む 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; } }マッピング構成ファイルを作成して、Java Bean のメンバー変数をデータテーブルのフィールドにマッピングします。 次のサンプルコードは、hibernate ディレクトリに Trip.hbm.xml という名前のマッピング構成ファイルを作成する方法を示しています。
重要Tablestore SQL はデータの挿入と更新をサポートしていません。 したがって、insert プロパティと update プロパティを false に設定する必要があります。 SQL でサポートされているデータ型の詳細については、「SQL でのデータ型マッピング」をご参照ください。 サポートされている SQL 機能の詳細については、「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"/> <!-- property 要素で構成されているフィールドは、データテーブルの属性列です。 属性列では挿入操作と更新操作が禁止されているため、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 構成ファイルを構成した後、Hibernate 構成ファイルをロードして SessionFactory をビルドします。
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 構成ファイルで構成する必要がある項目について説明しています。
設定項目
型
必須
例
説明
hibernate.connection.driver_class
class
はい
com.alicloud.openservices.tablestore.jdbc.OTSDriver
Tablestore 用 JDBC ドライバーのクラスの名前。 この設定項目を com.alicloud.openservices.tablestore.jdbc.OTSDriver に設定します。
hibernate.connection.url
string
はい
jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance
インスタンスのエンドポイント。 値は
jdbc:ots:endpoint/instanceName形式である必要があります。 endpoint はインスタンスのエンドポイントを示します。 詳細については、「エンドポイント」をご参照ください。 instanceName はインスタンスの名前を示します。 instanceName を実際のインスタンス名に置き換えます。この設定項目の値を指定する場合、値に
jdbc:ots:プレフィックスを含める必要があります。hibernate.connection.username
string
はい
************************
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
hibernate.connection.password
string
はい
********************************
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。
hibernate.connection.autocommit
boolean
はい
true
構成を自動的にコミットするかどうかを指定します。
重要Tablestore はトランザクションをサポートしていません。 hibernate.connection.autocommit を true に設定します。
hibernate.dialect
string
はい
org.hibernate.dialect.MySQLDialect
Tablestore SQL は MySQL 構文を継承しています。 この設定項目を
org.hibernate.dialect.MySQLDialectに設定します。Hibernate 構成ファイルをロードして SessionFactory をビルドします。
SessionFactory factory = new Configuration(). configure("hibernate/hibernate.cfg.xml"). buildSessionFactory();
手順 5:データクエリ用のセッションを作成する
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();完全なサンプルコード
次のサンプルコードは、プライマリキー列の値が 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"). // Hibernate 構成ファイルの完全なパスを指定します。
buildSessionFactory();
Session session = factory.openSession();
// プライマリキー列の値を 99 に設定します。 プライマリキー列の値が 99 である行が存在しない場合、null が返されます。
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();
}
} FAQ
Hibernate を使用して JDBC ドライバーを使用してデータをクエリするときに、次のエラーメッセージが表示された場合はどうすればよいですか?
問題の説明
Hibernate を使用して JDBC ドライバーを使用してデータをクエリすると、次のエラーメッセージが表示されます。
Exception in thread "main" org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:108) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:133) at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80) at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:322) at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485) at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133) at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84) at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286) .....考えられる原因
javassist-x.x.x.jar パッケージがありません。
解決策
次のいずれかの方法で javassist-x.x.x.jar パッケージをインストールします。
javassist インストールパッケージ javassist-x.x.x.jar をダウンロードし、プロジェクトにインポートします。 ダウンロードパスについては、「javassist インストールパッケージ」をご参照ください。
javassist-x.x.x.jar では、
x.x.xは javassist のバージョン番号を示します。 ビジネス要件に基づいて、javassist インストールパッケージをダウンロードしてください。Maven プロジェクトに依存関係を追加します。
Maven プロジェクトの pom.xml ファイルに対応する依存関係を追加します。 この例では、3.15.0-GA バージョンを使用しています。 <dependencies> に次のコンテンツを追加します。
<!-- https://mvnrepository.com/artifact/org.javassist/javassist --> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.15.0-GA</version> </dependency>
Hibernate を使用して JDBC ドライバーを使用してデータをクエリするときに、Message: Unknown column '{columnName}' in 'field list' エラーメッセージが表示された場合はどうすればよいですか?
問題の説明
Hibernate を使用して JDBC ドライバーを使用してデータをクエリすると、
Message: Unknown column '{columnName}' in 'field list'エラーメッセージが表示されます。考えられる原因
指定された列が SQL マッピングテーブルに存在しません。
解決策
指定された列が SQL マッピングテーブルに存在することを確認します。 次のいずれかの方法を使用してエラーを修正できます。
指定された列を事前定義列に追加して、指定された列を SQL マッピングテーブルに自動的に同期します。
CREATE TABLE 文を実行してマッピングテーブルを作成するときに、列を指定します。 詳細については、「テーブルのマッピングテーブルを作成する」をご参照ください。
ALTER TABLE 文を実行して、既存のマッピングテーブルの属性列を追加または削除します。 詳細については、「マッピングテーブルの属性列を更新する」をご参照ください。
関連情報
SQL 文を実行することでデータクエリと計算を高速化する場合、セカンダリインデックスまたは 多次元インデックス を作成できます。 詳細については、「インデックス選択ポリシー」および「プッシュダウンの計算」をご参照ください。
MaxCompute、Spark、Hive、HadoopMR、Function Compute、Flink、PrestoDB などの計算エンジンを使用して、テーブル内のデータを計算および分析することもできます。 詳細については、「概要」をご参照ください。
データを視覚化するには、Grafana を使用できます。 たとえば、Grafana を使用して Tablestore データをグラフに表示できます。 詳細については、「Tablestore を Grafana に接続する」をご参照ください。