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.xmenunjukkan 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.
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; } }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.
PentingTablestore 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.
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.
PentingTablestore 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.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.xmenunjukkan 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.