全部产品
Search
文档中心

Tablestore:Gunakan Hibernate untuk menanyakan data dengan menjalankan pernyataan SQL

更新时间:Jul 06, 2025

Hibernate adalah solusi Object/Relational Mapping (ORM) untuk lingkungan Java. Anda dapat mengakses Tablestore menggunakan Hibernate melalui driver Java Database Connectivity (JDBC) untuk Tablestore.

Informasi latar belakang

Hibernate adalah solusi Object/Relational Mapping (ORM) untuk lingkungan Java. Dengan Hibernate, Anda dapat memetakan kelas Java ke tabel database, tipe data Java ke tipe data SQL, serta menanyakan data. Hibernate secara signifikan mengurangi waktu pengembangan yang dihabiskan untuk menangani data secara manual dalam SQL dan JDBC. Untuk informasi lebih lanjut, lihat Dokumentasi Hibernate.

Catatan penggunaan

Fitur kueri SQL tersedia di wilayah berikut: Cina (Hangzhou), Cina (Shanghai), Cina (Beijing), Cina (Zhangjiakou), Cina (Ulanqab), Cina (Shenzhen), Cina (Chengdu), Cina (Hong Kong), Jepang (Tokyo), Singapura, Malaysia (Kuala Lumpur), Inggris (London), AS (Silicon Valley), Indonesia (Jakarta), Jerman (Frankfurt), SAU (Riyadh - Wilayah Mitra), dan AS (Virginia).

Prasyarat

  • Jika Anda ingin menanyakan data sebagai pengguna RAM, pastikan pengguna RAM telah dibuat dan semua izin operasi SQL diberikan kepada pengguna tersebut. Anda dapat mengonfigurasi "Action": "ots:SQL*" dalam kebijakan kustom yang dilampirkan pada pengguna RAM untuk memberikan semua izin operasi SQL. Untuk informasi lebih lanjut, lihat Gunakan Kebijakan RAM untuk Memberikan Izin kepada Pengguna RAM.

  • Pasangan AccessKey terdiri dari ID AccessKey dan Rahasia AccessKey harus diperoleh. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey.

  • Tabel data harus dibuat, dan tabel pemetaan juga perlu dibuat untuk tabel data tersebut. Untuk informasi lebih lanjut, lihat Prosedur dan Buat Tabel Pemetaan untuk Tabel.

Prosedur

Langkah 1: Instal driver JDBC

Anda dapat menginstal driver JDBC menggunakan salah satu metode berikut:

  • Unduh driver JDBC untuk Tablestore dan impor driver tersebut ke proyek. Untuk informasi lebih lanjut tentang jalur unduhan, lihat Driver JDBC untuk Tablestore.

  • Tambahkan dependensi ke proyek Maven.

    Untuk menggunakan driver JDBC untuk Tablestore di Maven, tambahkan dependensi yang sesuai ke file pom.xml. Contoh ini menggunakan driver JDBC versi 5.17.0. Tambahkan konten berikut ke <dependencies>:

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

Langkah 2: Instal Hibernate

Anda dapat menginstal Hibernate menggunakan salah satu metode berikut:

  • Unduh paket instalasi Hibernate hibernate-core-x.x.x.jar dan impor paket tersebut ke proyek. Untuk informasi lebih lanjut tentang jalur unduhan, lihat Paket Instalasi Hibernate.

    Dalam hibernate-core-x.x.x.jar, x.x.x menunjukkan nomor versi Hibernate. Unduh paket instalasi Hibernate sesuai dengan kebutuhan bisnis Anda.

  • Tambahkan dependensi ke proyek Maven.

    Untuk menggunakan Hibernate di Maven, tambahkan dependensi yang sesuai ke file pom.xml. Contoh ini menggunakan versi 3.6.3.Final. Tambahkan konten berikut ke <dependencies>:

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

Langkah 3: Pemetaan bidang SQL

Setelah membuat Java Bean yang berisi variabel anggota dengan nama yang sama dengan kolom di tabel data, buat file konfigurasi pemetaan untuk memetakan variabel anggota di Java Bean ke kolom di tabel data.

  1. Buat Java Bean yang berisi variabel anggota dengan nama yang sama dengan kolom di tabel data.

    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;
        
        // Tambahkan metode yang digunakan untuk menentukan nama bidang dan mengembalikan nilai bidang.
        // Dalam contoh ini, bidang tripId digunakan. Anda dapat menambahkan metode yang digunakan untuk menentukan nama bidang dan mengembalikan nilai bidang untuk bidang lainnya dengan cara serupa berdasarkan kebutuhan bisnis Anda.
        public void setTripId(Long tripId){
            this.tripId =tripId
        }
        public Long getTripId() {
            return tripId;
        }
    }
  2. Buat file konfigurasi pemetaan untuk memetakan variabel anggota di Java Bean ke kolom di tabel data. Contoh kode berikut menunjukkan cara membuat file konfigurasi pemetaan bernama Trip.hbm.xml di direktori Hibernate.

    Penting

    Tablestore SQL tidak mendukung penyisipan dan pembaruan data. Oleh karena itu, atur properti insert dan update menjadi false. Untuk informasi tentang tipe data yang didukung dalam SQL, lihat Pemetaan Tipe Data dalam SQL. Untuk informasi tentang fitur SQL yang didukung, lihat Fitur 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>
        <!--Tentukan nama kelas sebenarnya.-->
        <class name="hibernate.Trip" table="trips">
            <!-- Bidang yang dikonfigurasi dalam elemen id adalah kolom kunci utama dari tabel data.-->
            <id name="tripId" column="trip_id" type="long"/>
            <!-- Bidang yang dikonfigurasi dalam elemen property adalah kolom atribut dari tabel data. Anda harus mengatur properti insert dan properti update menjadi false karena operasi insert dan update dilarang 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 mengonfigurasi file konfigurasi Hibernate, muat file tersebut untuk membangun SessionFactory.

  1. Tambahkan konten berikut ke file konfigurasi Hibernate bernama hibernate.cfg.xml. Ubah item konfigurasi dalam file berdasarkan kebutuhan bisnis 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>
            <!-- Tentukan jalur file konfigurasi pemetaan.-->
            <mapping resource="hibernate/Trip.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    Tabel berikut menjelaskan item yang harus dikonfigurasi dalam file konfigurasi Hibernate.

    Item konfigurasi

    Tipe

    Diperlukan

    Contoh

    Deskripsi

    hibernate.connection.driver_class

    class

    Ya

    com.alicloud.openservices.tablestore.jdbc.OTSDriver

    Nama kelas untuk driver JDBC untuk Tablestore. Atur item konfigurasi ini menjadi com.alicloud.openservices.tablestore.jdbc.OTSDriver.

    hibernate.connection.url

    string

    Ya

    jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance

    Titik akhir instance. Nilainya harus dalam format berikut: jdbc:ots:endpoint/instanceName. endpoint menunjukkan titik akhir instance. Untuk informasi lebih lanjut, lihat Titik akhir. instanceName menunjukkan nama instance. Ganti instanceName dengan nama instance sebenarnya.

    Saat menentukan nilai untuk item konfigurasi ini, awalan jdbc:ots: harus disertakan dalam nilai.

    hibernate.connection.username

    string

    Ya

    ************************

    ID AccessKey akun Alibaba Cloud atau pengguna RAM Anda.

    hibernate.connection.password

    string

    Ya

    ********************************

    Rahasia AccessKey akun Alibaba Cloud atau pengguna RAM Anda.

    hibernate.connection.autocommit

    boolean

    Ya

    true

    Menentukan apakah akan secara otomatis melakukan commit konfigurasi.

    Penting

    Tablestore tidak mendukung transaksi. Atur hibernate.connection.autocommit menjadi true.

    hibernate.dialect

    string

    Ya

    org.hibernate.dialect.MySQLDialect

    Tablestore SQL mewarisi sintaks MySQL. Atur item konfigurasi ini menjadi 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 sesi untuk menanyakan data

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

Kode sampel lengkap

Contoh kode berikut menunjukkan cara menanyakan baris di mana nilai kolom kunci utama adalah 99 dan mengembalikan kolom tertentu dari baris tersebut:

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"). // Tentukan jalur penuh file konfigurasi Hibernate.
                buildSessionFactory();
        Session session = factory.openSession();
        // Tetapkan nilai kolom kunci utama menjadi 99. Jika baris di mana nilai kolom kunci utama adalah 99 tidak ada, null dikembalikan.
        Trip trip = (Trip) session.get(Trip.class, 99L);
        // Tampilkan nilai kolom yang ingin Anda peroleh.
        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

Apa yang harus saya lakukan jika pesan kesalahan berikut muncul saat saya menanyakan data dengan menggunakan Hibernate untuk menggunakan driver JDBC?

  • Deskripsi Masalah

    Saat menanyakan data menggunakan Hibernate untuk menggunakan driver JDBC, pesan kesalahan berikut muncul:

    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)
      .....
  • Penyebab Potensial

    Paket javassist-x.x.x.jar hilang.

  • Solusi

    Instal paket javassist-x.x.x.jar menggunakan salah satu metode berikut:

    • Unduh paket instalasi javassist javassist-x.x.x.jar dan impor paket tersebut ke proyek. Untuk informasi lebih lanjut tentang jalur unduhan, lihat Paket Instalasi javassist.

      Dalam javassist-x.x.x.jar, x.x.x menunjukkan nomor versi javassist. Unduh paket instalasi javassist sesuai dengan kebutuhan bisnis Anda.

    • Tambahkan dependensi ke proyek Maven.

      Tambahkan dependensi yang sesuai ke file pom.xml di proyek Maven. Contoh ini menggunakan versi 3.15.0-GA. Tambahkan konten berikut ke <dependencies>:

      <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
      <dependency>
          <groupId>org.javassist</groupId>
          <artifactId>javassist</artifactId>
          <version>3.15.0-GA</version>
      </dependency>

Apa yang harus saya lakukan jika Pesan: Kolom tidak dikenal '{columnName}' dalam 'field list' pesan kesalahan muncul saat saya menanyakan data dengan menggunakan Hibernate untuk menggunakan driver JDBC?

  • Deskripsi Masalah

    Saat menanyakan data menggunakan Hibernate untuk menggunakan driver JDBC, Pesan: Kolom tidak dikenal '{columnName}' dalam 'field list' pesan kesalahan muncul.

  • Penyebab Potensial

    Kolom yang ditentukan tidak ada dalam tabel pemetaan SQL.

  • Solusi

    Pastikan bahwa kolom yang ditentukan ada dalam tabel pemetaan SQL. Anda dapat menggunakan salah satu metode berikut untuk memperbaiki kesalahan:

    • Tambahkan kolom yang ditentukan ke kolom yang telah ditentukan sebelumnya untuk menyinkronkan kolom yang ditentukan secara otomatis ke tabel pemetaan SQL.

    • Tentukan kolom saat menjalankan pernyataan CREATE TABLE untuk membuat tabel pemetaan. Untuk informasi lebih lanjut, lihat Buat Tabel Pemetaan untuk Tabel.

    • Jalankan pernyataan ALTER TABLE untuk menambahkan atau menghapus kolom atribut untuk tabel pemetaan yang ada. Untuk informasi lebih lanjut, lihat Perbarui Kolom Atribut Tabel Pemetaan.

Referensi

  • Jika Anda ingin mempercepat kueri data dan komputasi dengan menjalankan pernyataan SQL, Anda dapat membuat indeks sekunder atau indeks pencarian. Untuk informasi lebih lanjut, lihat Kebijakan Pemilihan Indeks dan Pushdown Komputasi.

  • Anda juga dapat menggunakan mesin komputasi seperti MaxCompute, Spark, Hive, HadoopMR, Function Compute, Flink, dan PrestoDB untuk menghitung dan menganalisis data dalam tabel. Untuk informasi lebih lanjut, lihat Ikhtisar.

  • Untuk memvisualisasikan data, Anda dapat menggunakan Grafana. Misalnya, Anda dapat menggunakan Grafana untuk menampilkan data Tablestore dalam bentuk grafik. Untuk informasi lebih lanjut, lihat Hubungkan Tablestore ke Grafana.