Todos os produtos
Search
Central de documentação

Tablestore:Use Hibernate to query data with SQL

Última atualização: Jul 03, 2026

Integre o driver JDBC do Tablestore ao ORM Hibernate para consultar dados do Tablestore em uma aplicação Java.

Pré-requisitos

  • Um par de AccessKey. Usuários RAM precisam da permissão "Action": "ots:SQL*".

  • Uma tabela de dados e operações DDL configuradas para consultas SQL.

Procedimento

Etapa 1: Instale o driver JDBC

Instale o driver JDBC de uma das seguintes formas:

Maven dependency

Adicione a seguinte dependência ao arquivo pom.xml do seu projeto Maven. Este exemplo usa a versão 5.17.0:

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

Manual installation

Baixe o driver JDBC do Tablestore e importe-o para o seu projeto.

Etapa 2: Instale o Hibernate

Instale o Hibernate de uma das seguintes formas:

Maven dependency

Adicione a seguinte dependência ao arquivo pom.xml do seu projeto Maven. Este exemplo usa a versão 3.6.3.Final:

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

Manual installation

Baixe o Hibernate e importe-o para o seu projeto.

Etapa 3: Mapear colunas SQL

Crie um Java Bean e um arquivo de configuração de mapeamento para associar as propriedades do bean às colunas da tabela.

  1. Crie um Java Bean com propriedades correspondentes às colunas da tabela.

    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. Crie um arquivo Trip.hbm.xml no diretório hibernate com o conteúdo abaixo. Esse arquivo mapeia as propriedades do bean para as colunas da tabela.

    Importante

    Para consultas somente leitura, defina os atributos insert e update das colunas de atributo como false para impedir que o Hibernate gere instruções de escrita. Para regras de mapeamento de tipos de dados SQL, consulte Mapeamentos de tipos de dados em 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>

Etapa 4: Crie um SessionFactory

Após criar os arquivos de configuração, carregue a configuração do Hibernate para criar um SessionFactory.

  1. Crie um arquivo de configuração do Hibernate chamado hibernate.cfg.xml com o conteúdo a seguir. Substitua os valores de configuração pelos seus valores reais.

    <?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>

    Propriedades de configuração:

    Propriedade

    Tipo

    Obrigatório

    Descrição

    hibernate.connection.driver_class

    class

    Sim

    Nome da classe do driver JDBC do Tablestore. Defina como com.alicloud.openservices.tablestore.jdbc.OTSDriver.

    hibernate.connection.url

    string

    Sim

    URL da instância do Tablestore no formato jdbc:ots:endpoint/instanceName. Substitua endpoint pelo endpoint do serviço e instanceName pelo nome da sua instância.

    hibernate.connection.username

    string

    Sim

    AccessKey ID da sua conta Alibaba Cloud ou usuário RAM.

    hibernate.connection.password

    string

    Sim

    AccessKey Secret da sua conta Alibaba Cloud ou usuário RAM.

    hibernate.connection.autocommit

    boolean

    Sim

    Define se o auto-commit deve ser ativado.

    Importante

    O Tablestore não suporta transações. Defina autocommit como true.

    hibernate.dialect

    string

    Sim

    Dialeto SQL. Como o SQL do Tablestore é compatível com a sintaxe MySQL, defina este valor como org.hibernate.dialect.MySQLDialect.

  2. Carregue o arquivo de configuração do Hibernate para criar um SessionFactory.

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

Etapa 5: Crie uma Session e consultar dados

Crie uma Session a partir do SessionFactory e chame o método get para consultar dados pela chave primária.

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();

Exemplo completo

Consulte uma linha pela chave primária e recupere os valores das colunas. O exemplo a seguir utiliza o valor de chave primária 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();
    }
}           

Perguntas frequentes

Não é possível instanciar o tuplizer padrão

Mensagem de erro:

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

Causa: A dependência javassist está ausente.

Solução:

Adicione a seguinte dependência ao arquivo pom.xml:

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

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

Causa: A coluna especificada não existe na tabela de mapeamento SQL.

Solução:

  • Adicione a coluna como uma coluna predefinida. A sincronização para a tabela de mapeamento SQL ocorre automaticamente.

  • Inclua a coluna na tabela de mapeamento com uma instrução CREATE TABLE ou ALTER TABLE. Consulte Operações DDL.