使用 Hibernate 访问 Java SQLite 数据库

问题描述 投票:0回答:1

我遇到无法将 Java 项目与 SQLite 数据库连接的问题。我已经在一个单独的程序中尝试过它并且它在那里工作,但在这个程序中不起作用。我得到的例外是它无法映射。也许你们中的一个人知道问题可能是什么。

package justanorg.taskmanager.DAO;


public class Test {
    
    public static void main(String[] args) {
        NameDAOImpl names = new NameDAOImpl();
        System.out.println(!names.getNames().isEmpty());
    }
}

hibernate.cfg.xml

<!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>
        <!-- Database connection settings -->
        <property name="connection.driver_class">org.sqlite.JDBC</property>
        <property name="connection.url">jdbc:sqlite:src/main/resources/justanorg/taskmanager/DAO/TaskManager.db/</property>

        <property name="hibernate.dialect">org.sqlite.hibernate.dialect.SQLiteDialect</property>
        <mapping class="justanorg.taskmanager.DAO.model.Project"/>
        <mapping class="justanorg.taskmanager.DAO.model.Name"/>
    </session-factory>
</hibernate-configuration>

我的班级填写实体数据:

package justanorg.taskmanager.DAO.model;

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

@Entity
@Table (name = "name")
public class Name {

    @Id
    @Column(name = "Name")
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
}

执行SQL命令:

package justanorg.taskmanager.DAO;


import justanorg.taskmanager.DAO.model.Name;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import java.util.ArrayList;
import java.util.List;

public class NameDAOImpl{
    
    private SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
    
    public List<Name> getNames() {
        List<Name> names = null;
        Session session = null;
        Transaction transaction = null;
        try {
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            names = session.createQuery("from Name").list();
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            return new ArrayList<>();
        }
        return names;
    }
}
java sql hibernate sqlite maven
1个回答
0
投票

我已经检查了你的程序,你可以下载并测试一下。我使用的是Postgresql数据库,你可以使用SQLLite。

package mypackage;

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

@Entity
@Table (name = "name")
public class Name {

    @Id
    @Column(name = "Name")
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
}

package mypackage;

import   org.hibernate.Session;
import   org.hibernate.SessionFactory;
import   javax.persistence.TypedQuery;  
import   org.hibernate.Transaction;  
import   org.hibernate.boot.Metadata;  
import   org.hibernate.boot.MetadataSources;  
import   org.hibernate.boot.registry.StandardServiceRegistry;  
import   org.hibernate.boot.registry.StandardServiceRegistryBuilder;  
import   java.util.Iterator;

import java.util.ArrayList;
import java.util.List;

public class NameDaoImpl{
    
    StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();  
    Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();  
          
    SessionFactory sessionFactory=meta.getSessionFactoryBuilder().build();  
    
    public List<Name> getNames() {
        List<Name> names = null;
        Session session = null;
        Transaction transaction = null;
        try {
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            TypedQuery query = session.createQuery("from Name");
            names=query.getResultList();
            Iterator<Name>   itr=names.iterator();
            while(itr.hasNext())
            {
                Name name=itr.next();
                System.out.println(name.getName());
            }
            transaction.commit();
            //return names;
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            return new ArrayList<>();
        }
        return names;
    }
}

package mypackage;


public class Test {
    
    public static void main(String[] args) {
        NameDaoImpl names = new NameDaoImpl();
        System.out.println(!names.getNames().isEmpty());
    }
}

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 5.3//EN"  
        "http://www.hibernate.org/dtd/hibernate-configuration-5.3.dtd">  
<hibernate-configuration>  
    <session-factory>  
            
    <property name="hbm2ddl.auto">update</property>    
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>    
        <property name="connection.url">jdbc:postgresql://localhost:5432/ayurgyan</property>    
        <property name="connection.username">postgres</property>    
        <property name="connection.password">postgres</property>    
        <property name="connection.driver_class">org.postgresql.Driver</property>   
       
        <mapping class="mypackage.Name"/>  
        <!--<mapping class="mypackage.Regular_Employee"/>  
        <mapping class="mypackage.Contract_Employee"/> -->  
          
    </session-factory>  
</hibernate-configuration>  
© www.soinside.com 2019 - 2024. All rights reserved.