All Products
Search
Document Center

Tablestore:Gunakan Hibernate untuk mengkueri data dengan SQL

Last Updated:Jun 10, 2026

Integrasikan driver JDBC Tablestore dengan Hibernate ORM untuk mengkueri data Tablestore dalam aplikasi Java.

Prasyarat

  • Pasangan Kunci Akses. Pengguna RAM memerlukan izin "Action": "ots:SQL*".

  • Sebuah tabel data dan operasi DDL yang telah dikonfigurasi untuk kueri SQL.

Prosedur

Langkah 1: Instal driver JDBC

Instal driver JDBC dengan salah satu cara berikut.

Dependensi Maven

Tambahkan dependensi berikut ke file pom.xml proyek Maven Anda. Contoh ini menggunakan versi 5.17.0:

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

Instalasi manual

Unduh driver JDBC Tablestore dan impor ke dalam proyek Anda.

Langkah 2: Instal Hibernate

Instal Hibernate dengan salah satu cara berikut.

Dependensi Maven

Tambahkan dependensi berikut ke file pom.xml proyek Maven Anda. Contoh ini menggunakan versi 3.6.3.Final:

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

Instalasi manual

Unduh Hibernate dan impor ke dalam proyek Anda.

Langkah 3: Petakan kolom SQL

Buat Java Bean dan file konfigurasi pemetaan untuk memetakan properti bean ke kolom tabel.

  1. Buat Java Bean dengan properti yang sesuai dengan kolom tabel.

    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;
        
        // Gunakan tripId sebagai contoh. Bidang lainnya serupa.
        public void setTripId(Long tripId){
            this.tripId = tripId;
        }
        public Long getTripId() {
            return tripId;
        }
    }
  2. Buat file Trip.hbm.xml di direktori hibernate dengan konten berikut. File ini memetakan properti bean ke kolom tabel.

    Penting

    Untuk kueri read-only, atur atribut insert dan update pada kolom atribut ke false agar Hibernate tidak menghasilkan pernyataan tulis. Untuk aturan pemetaan tipe data SQL, lihat Pemetaan tipe data dalam 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>
        <!--Nama kelas harus sesuai dengan nama kelas aktual.-->
        <class name="hibernate.Trip" table="trips">
            <!-- Bidang yang dikonfigurasi dalam elemen id adalah kolom kunci primer tabel.-->
            <id name="tripId" column="trip_id" type="long"/>
            <!-- Untuk kueri read-only, atur insert dan update ke false untuk kolom atribut.-->
            <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>

Langkah 4: Bangun SessionFactory

Setelah membuat file konfigurasi, muat konfigurasi Hibernate untuk membangun SessionFactory.

  1. Buat file konfigurasi Hibernate bernama hibernate.cfg.xml dengan konten berikut. Ganti nilai konfigurasi dengan nilai aktual Anda.

    <?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>
            <!-- Atur ini ke path file konfigurasi pemetaan.-->
            <mapping resource="hibernate/Trip.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    Properti konfigurasi:

    Properti

    Tipe

    Wajib

    Deskripsi

    hibernate.connection.driver_class

    class

    Ya

    Nama kelas driver JDBC Tablestore. Atur ke com.alicloud.openservices.tablestore.jdbc.OTSDriver.

    hibernate.connection.url

    string

    Ya

    URL instans Tablestore dalam format jdbc:ots:endpoint/instanceName. Ganti endpoint dengan titik akhir layanan dan instanceName dengan nama instans Anda.

    hibernate.connection.username

    string

    Ya

    ID AccessKey Akun Alibaba Cloud atau Pengguna RAM Anda.

    hibernate.connection.password

    string

    Ya

    Secret AccessKey Akun Alibaba Cloud atau Pengguna RAM Anda.

    hibernate.connection.autocommit

    boolean

    Ya

    Menentukan apakah auto-commit diaktifkan.

    Penting

    Tablestore tidak mendukung transaksi. Atur autocommit ke true.

    hibernate.dialect

    string

    Ya

    Dialek SQL. Karena SQL Tablestore kompatibel dengan sintaksis MySQL, atur ke org.hibernate.dialect.MySQLDialect.

  2. Muat file konfigurasi Hibernate untuk membangun SessionFactory.

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

Langkah 5: Buat Session dan kueri data

Buat Session dari SessionFactory, lalu panggil metode get untuk mengkueri data berdasarkan kunci primer.

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

Contoh lengkap

Kueri satu baris berdasarkan kunci primer dan ambil nilai kolomnya. Contoh berikut menggunakan nilai kunci primer 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

Tidak dapat membuat instans tuplizer default

Pesan error:

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

Penyebab: Dependensi javassist tidak tersedia.

Solusi:

Tambahkan dependensi berikut ke pom.xml:

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

Kolom '{columnName}' tidak dikenal di 'field list'

Penyebab: Kolom yang ditentukan tidak ada di tabel pemetaan SQL.

Solusi:

  • Tambahkan kolom tersebut sebagai kolom pradefinisi. Kolom akan secara otomatis disinkronkan ke tabel pemetaan SQL.

  • Tambahkan kolom ke tabel pemetaan dengan pernyataan CREATE TABLE atau ALTER TABLE. Lihat operasi DDL.