Tous les produits
Search
Centre de documentation

Tablestore:Utiliser Hibernate pour interroger des données avec SQL

Dernière mise à jour :Aug 18, 2026

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.

  1. 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;
        }
    }
  2. Créez un fichier Trip.hbm.xml dans le répertoire hibernate avec le contenu suivant. Ce fichier mappe les propriétés du bean aux colonnes de la table.

    Important

    Pour les requêtes en lecture seule, définissez les attributs insert et update des colonnes d'attribut sur false afin 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.

  1. Créez un fichier de configuration Hibernate nommé hibernate.cfg.xml avec 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. Remplacez endpoint par le point de terminaison du service et instanceName par 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).

    Important

    Tablestore ne prend pas en charge les transactions. Définissez autocommit sur true.

    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.

  2. 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.