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.
-
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; } } -
Buat file
Trip.hbm.xmldi direktorihibernatedengan konten berikut. File ini memetakan properti bean ke kolom tabel.PentingUntuk kueri read-only, atur atribut
insertdanupdatepada kolom atribut kefalseagar 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.
-
Buat file konfigurasi Hibernate bernama
hibernate.cfg.xmldengan 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. Gantiendpointdengan titik akhir layanan daninstanceNamedengan 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.
PentingTablestore tidak mendukung transaksi. Atur
autocommitketrue.hibernate.dialect
string
Ya
Dialek SQL. Karena SQL Tablestore kompatibel dengan sintaksis MySQL, atur ke
org.hibernate.dialect.MySQLDialect. -
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.