Intégrez le pilote JDBC Tablestore à l'ORM Hibernate afin d'interroger les données Tablestore depuis une application Java.
Prérequis
Une paire AccessKey. Les utilisateurs RAM doivent disposer de l'autorisation
"Action": "ots:SQL*".Une table de données et des opérations DDL configurées pour les requêtes SQL.
Procédure
Étape 1 : Installer le pilote JDBC
Installez le pilote JDBC en suivant l'une des méthodes ci-dessous.
Dépendance Maven
Ajoutez la dépendance suivante au fichier pom.xml de votre projet Maven. Cet exemple utilise la version 5.17.0 :
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore-jdbc</artifactId>
<version>5.17.0</version>
</dependency>
Installation manuelle
Téléchargez le pilote JDBC Tablestore et importez-le dans votre projet.
Étape 2 : Installer Hibernate
Installez Hibernate en suivant l'une des méthodes ci-dessous.
Dépendance Maven
Ajoutez la dépendance suivante au fichier pom.xml de votre projet Maven. Cet exemple utilise la version 3.6.3.Final :
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.3.Final</version>
</dependency>
Installation manuelle
Téléchargez Hibernate et importez-le dans votre projet.
Étape 3 : Mapper les colonnes SQL
Créez un bean Java et un fichier de configuration de mappage pour associer les propriétés du bean aux colonnes de la table.
-
Créez un bean Java dont les propriétés correspondent aux colonnes de la table.
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; // Use tripId as an example. Other fields are similar. public void setTripId(Long tripId){ this.tripId = tripId; } public Long getTripId() { return tripId; } } -
Créez un fichier
Trip.hbm.xmldans le répertoirehibernateavec le contenu suivant. Ce fichier mappe les propriétés du bean aux colonnes de la table.ImportantPour les requêtes en lecture seule, définissez les attributs
insertetupdatedes colonnes d'attribut surfalseafin d'empêcher Hibernate de générer des instructions d'écriture. Pour connaître les règles de mappage des types de données SQL, consultez la section Mappages des types de données en 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> <!--The class name must match the actual class name.--> <class name="hibernate.Trip" table="trips"> <!-- The field configured in the id element is the primary key column of the table.--> <id name="tripId" column="trip_id" type="long"/> <!-- For read-only queries, set insert and update to false for attribute columns.--> <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>
Étape 4 : Construire un SessionFactory
Une fois les fichiers de configuration créés, chargez la configuration Hibernate pour construire un SessionFactory.
-
Créez un fichier de configuration Hibernate nommé
hibernate.cfg.xmlavec le contenu suivant. Remplacez les valeurs de configuration par vos propres valeurs.<?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> <!-- Set this to the path of the mapping configuration file.--> <mapping resource="hibernate/Trip.hbm.xml"/> </session-factory> </hibernate-configuration>Propriétés de configuration :
Propriété
Type
Obligatoire
Description
hibernate.connection.driver_class
classe
Oui
Nom de classe du pilote JDBC Tablestore. Définissez cette valeur sur
com.alicloud.openservices.tablestore.jdbc.OTSDriver.hibernate.connection.url
chaîne
Oui
URL de l'instance Tablestore au format
jdbc:ots:endpoint/instanceName. Remplacezendpointpar le point de terminaison du service etinstanceNamepar le nom de votre instance.hibernate.connection.username
chaîne
Oui
AccessKey ID de votre compte Alibaba Cloud ou utilisateur RAM.
hibernate.connection.password
chaîne
Oui
AccessKey Secret de votre compte Alibaba Cloud ou utilisateur RAM.
hibernate.connection.autocommit
booléen
Oui
Indique s'il faut activer la validation automatique (auto-commit).
ImportantTablestore ne prend pas en charge les transactions. Définissez
autocommitsurtrue.hibernate.dialect
chaîne
Oui
Dialecte SQL. Étant donné que le SQL Tablestore est compatible avec la syntaxe MySQL, définissez cette valeur sur
org.hibernate.dialect.MySQLDialect. -
Chargez le fichier de configuration Hibernate pour construire un SessionFactory.
SessionFactory factory = new Configuration(). configure("hibernate/hibernate.cfg.xml"). buildSessionFactory();
Étape 5 : Créer une session et interroger les données
Créez une session à partir du SessionFactory et appelez la méthode get pour interroger les données par clé primaire.
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();
Exemple complet
Interrogez une ligne par clé primaire et récupérez les valeurs des colonnes. L'exemple suivant utilise la valeur de clé primaire 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();
}
}
FAQ
Impossible d'instancier le tuplizer par défaut
Message d'erreur :
org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
Cause : La dépendance javassist est manquante.
Solution :
Ajoutez la dépendance suivante au fichier pom.xml :
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.15.0-GA</version>
</dependency>
Colonne « {columnName} » inconnue dans la liste des champs
Cause : La colonne spécifiée n'existe pas dans la table de mappage SQL.
Solution :
Ajoutez la colonne en tant que colonne prédéfinie. Elle sera automatiquement synchronisée avec la table de mappage SQL.
Ajoutez la colonne à la table de mappage à l'aide d'une instruction CREATE TABLE ou ALTER TABLE. Consultez la section Opérations DDL.