Về ORM Framework sử dụng cho CSDL SQLite trên Java

Xin chào mọi người ở daynhauhoc! :slight_smile:
Hôm nay mình định làm một ứng dụng nhỏ sử dụng SQLite trên Java nhưng mình không muốn dụng vào code SQL. Mình có thử một vài Tutorial sử dụng Hibernate nhưng toàn lỗi ở dialect
Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]
code HibernateUtil.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sakadream.fileupload.hibernate;


import com.sakadream.fileupload.entities.Image;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

import java.util.Properties;

/**
 * Hibernate Utility class with a convenient method to get Session Factory
 * object.
 *
 * @author Phan Ba Hai
 */
public class HibernateUtil {

    private static final SessionFactory sessionFactory;
    
    static {
        try {
            Properties prop = new Properties();
            prop.put("hibernate.connection.driver_class", "org.sqlite.JDBC");
            prop.put("hibernate.connection.url", "jdbc:sqlite:mydb.db");
            prop.put("hibernate.connection.username", "");
            prop.put("hibernate.connection.password", "");
            prop.put("hibernate.current_session_context_class", "thread");
            prop.put("hibernate.query.factory_class", "org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory");
            prop.put("hibernate.dialect", "org.hibernate.dialect.SQLiteDialect");
            prop.put("hibernate.show_sql", "true");

            sessionFactory = new AnnotationConfiguration()
                    .addPackage("com.sakadream.fileupload.entities")
                    .addProperties(prop)
                    .addAnnotatedClass(Image.class)
                    .buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

file model Image.java

package com.sakadream.fileupload.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * Created by Phan Ba Hai on 17/08/2017.
 */
@Entity
@Table
public class Image {
    @Id
    @Column
    private int id;
    @Column
    private String fileName;

    public Image(String fileName) {
        this.fileName = fileName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}

Câu đầu tiên là Hibernate có thật sự hỗ trợ SQLite không?
Câu thứ 2, nếu có thì bằng cách nào?
Câu thứ 3, nếu không thì có ORM nào thay thế không? Mình thấy bên Android có ORMLite khá hay nhưng không biết nó có xài được trên app java thông thường hay không?

  1. Không, nhưng có một số thư viện ngoài hỗ trợ
  2. Bạn tham khảo tại đây: https://stackoverflow.com/questions/17587753/does-hibernate-fully-support-sqlite

P/S: Mình thấy những câu hỏi tương tự như này, nên search trên google/stackoverflow trước khi hỏi DNH

1 Like

Mình search gần 1 tiếng đồng hồ về cái dialect và hibernate đó và cũng cho kết quả tương tự nên muốn tham khảo trên này xem có ai làm được chưa thôi :smile: Cảm ơn bạn nhiều
Thôi thì lại gõ mấy câu SQL vậy :laughing:

;Ngoài lề
Cũng muốn xài ORM mà thấy bảo làm giảm performance đáng kể so với xài thuần SQL.

Thôi khổ dâm code thuần SQL, đến lúc gõ complex command cho thuộc :joy:

// Bên PHP đã chậm rồi bố Laravel còn chơi full ORM

3 Likes

chú có add repo sql dalect không?
https://mvnrepository.com/artifact/org.hibernate.dialect/sqlite-dialect/0.1.0
ah, nêu ko dùng maven, thì down các lib ây về luôn thử :smiley:

1 Like

Tất nhiên việc sử dụng ORM sẽ giảm performance của app do phải query nhiều. Nhất là thằng Hibernate. Nhìn query nó show ra mà hoảng :scream:
Mới đầu xài Hibernate chả ưa gì nó vì cứ lộn HQL của nó và SQL. Sau này thử vọc Annotation + Hibernate xem sao. Ai dè thích luôn :laughing: Mình thích Annotation + Config Hibernate bằng cách chèn Property bên HibernateUtil luôn chứ không xài Netbeans gen code. Gen code thì không kiểm soát được Hibernate nó mapping với bảng thế nào. Nhất là cột có NVARCHAR mapping sang Hibernate đều chuyển sang kiểu Serializable chứ không phải String. Mapping kiểu xml phải chỉnh cả file xml + Pojo nên dễ quên
Mấy bữa nay vọc Android xài thử ORMLite thấy mê quá nên thử xem có xài thằng đó trên app Java thông thường không
À, mà mình có thấy ví dụ của ORMLite JDBC, để thử test xem

1 Like

sài spring framework + anotation của nó để mapping rất sướng mà mình lại kiểm soát được việc mapping nữa chứ ai lại đi gencode , hix mình giờ đang muốn tìm hiểu làm sao để viết được 1 cái framework như spring nhưng nhỏ và nhẹ hơn vì thấy kiến trúc của nó khá tốt…

1 Like

Mình chỉ biết làm thư viện connect + query SQL + lưu cấu hình connection ra file json thôi. Cũng muốn tìm hiểu làm một ORM Framework nhỏ nhỏ kiểu ORMLite :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?