hjy233hg 2023-01-23 18:00 采纳率: 50%
浏览 56
已结题

java搭建hibernate框架报错

问题遇到的现象和发生背景

学校要求对着书做毕业设计,课题是《基于hibernate的通讯录系统》,我按照书上介绍一步一步做应该没有问题,但是程序却报错。使用的语言是java,开发平台使用的是EclipseEE,用的是javaSE1.8,框架使用的是hibernate,数据库用的是MySQL。

遇到的现象和发生背景,请写出第一个错误信息

导入JAR包,将程序按要求复制上去之后运行,报错。我自己写程序的时候就报错,我以为是我程序错误,为保证绝对正确我复制了书作者提供的程序,依旧报错。

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

我的项目结构如下:

img

完整的Java程序如下:

package frame;
import com.mr.contact.swing.ContactFrame;
import java.util.List;
import javax.swing.table.DefaultTableModel;
import com.mr.contact.dao.Dao;
import com.mr.contact.dao.DaoFactory;
import com.mr.contact.swing.FixedTable;
import pojo.Customer;

    /**
     * 主窗体
     * 
     */
    public class MainFrame extends ContactFrame {// 继承ContactFrame类
        private Dao dao;                // 数据库接口
        private FixedTable table;            // 通讯录表格
        private DefaultTableModel tableModel;        // 定义表格模型对象模型

        /**
         * 构造方法
         */
        public MainFrame() {
            setTitle("通讯录系统");// 窗体标题
            init();
            validate();
        }// MainFrame()结束
        /**
         * 组件初始化
         */
        protected void init() {
            super.init();                                        // 调用父类init()方法
            dao = DaoFactory.getDao();                            // 实例化数据库接口
            table = getTable();                                    // 创建指定表格模型的表格
            table.setCellEditable(false);                            // 让表格不可编辑
            initTable();                                            // 初始化表格数据
        }// init()结束

        /**
         * 初始化表格数据
         */
        public void initTable() {
            tableModel = getUsableModleSoure();                    // 获取所有有效客户信息
            table.setModel(tableModel);                            // 客户信息表格加载数据模型
        }// initTable()

        /**
         * 查询所有有效客户信息
         * 
         * @return表格数据模型
         */
        private DefaultTableModel getUsableModleSoure() {
            List<Customer> usableList = dao.selectUsableCustomer();    // 获取所有有效客户
            return assembledModleSoure(usableList);                // 返回有所有有效客户表格数据模型
        }// getUsableModleSoure()结束

        /**
         * 根据不同的客户集合,获取相应的表格数据模型
         * 
         * @param usableList -客户集合
         * @return表格数据模型
         */
        private DefaultTableModel assembledModleSoure(List<Customer> usableList) {
            int customerCount = usableList.size();                    // 获取集合的客户数量
            String[] columnNames = { "编号", "姓名", "性别", "出生日期", "工作单位","职位",
                                     "工作地点", "家庭住址" };        // 定义表格列名数组
            String[][] tableValues = new String[customerCount][8];    // 创建表格数据数组
            for (int i = 0; i<customerCount; i++) {                    // 遍历表格所有行
                Customer cust = usableList.get(i);                // 获取行用户对象
                tableValues[i][0] = "" + cust.getId();                // 第一列为编号
                tableValues[i][1] = cust.getName();                // 第二列为名称
                tableValues[i][2] = cust.getSex();                // 第三列为性别
                tableValues[i][3] = cust.getBirth();                // 第四列为出生日期
                tableValues[i][4] = cust.getWork_unit();            // 第五列为公司名称
                tableValues[i][5] = cust.getRole();                // 第六位为职位
                tableValues[i][6] = cust.getWork_addr();            // 第七列为公司地址
                tableValues[i][7] = cust.getHome_addr();            // 第八列为家庭住址
            } // for结束
            // 根据列名数组和数据数组创建表格数据模型
            DefaultTableModel tmp = new DefaultTableModel(tableValues, columnNames);
            return tmp;
        }// assembledModleSoure()结束

        /**
         * 主方法
         */
        public static void main(String[] args) {
            new MainFrame();// 将主窗体实例化
        
        }// main()结束

    }// MainFrame类结束




配置文件hibernate.cfg.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        
        <property name="connection.url">jdbc:mysql://localhost:3306/test02</property>
        
        <property name="connection.username">root</property>
        
        <property name="connection.password">1114aaad</property>
        
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <property name="show_sql">false</property>
        
        <mapping resource="pojo/User.hbm.xml" />
        <mapping resource="pojo/Customer.hbm.xml" />
        <mapping resource="pojo/Communication.hbm.xml" />
    </session-factory>
</hibernate-configuration>

运行结果及详细报错内容

完整的报错信息如下:

123, 2023 4:50:52 下午 org.hibernate.cfg.Environment <clinit>
信息: Hibernate 3.2.0
123, 2023 4:50:52 下午 org.hibernate.cfg.Environment <clinit>
信息: hibernate.properties not found
123, 2023 4:50:52 下午 org.hibernate.cfg.Environment buildBytecodeProvider
信息: Bytecode provider name : cglib
123, 2023 4:50:52 下午 org.hibernate.cfg.Environment <clinit>
信息: using JDK 1.4 java.sql.Timestamp handling
123, 2023 4:50:52 下午 org.hibernate.cfg.Configuration configure
信息: configuring from resource: /hibernate.cfg.xml
123, 2023 4:50:52 下午 org.hibernate.cfg.Configuration getConfigurationInputStream
信息: Configuration resource: /hibernate.cfg.xml
123, 2023 4:50:52 下午 org.hibernate.cfg.Configuration addResource
信息: Reading mappings from resource: pojo/User.hbm.xml
123, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: pojo.User -> tb_users
123, 2023 4:50:52 下午 org.hibernate.cfg.Configuration addResource
信息: Reading mappings from resource: pojo/Customer.hbm.xml
123, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: pojo.Customer -> tb_customer_info
123, 2023 4:50:52 下午 org.hibernate.cfg.Configuration addResource
信息: Reading mappings from resource: pojo/Communication.hbm.xml
123, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: pojo.Communication -> tb_communication_info
123, 2023 4:50:52 下午 org.hibernate.cfg.Configuration doConfigure
信息: Configured SessionFactory: null
123, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindCollectionSecondPass
信息: Mapping collection: pojo.Customer.communicationList -> tb_communication_info
123, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: Using Hibernate built-in connection pool (not for production use!)
123, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: Hibernate connection pool size: 20
123, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: autocommit mode: false
123, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/test02
123, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: connection properties: {password=****, user=root}
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: RDBMS: MySQL, version: 5.7.31-log
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC driver: MySQL Connector Java, version: mysql-connector-java-5.1.36 ( Revision: 4fc1f969f740409a4e03750316df2c0e429f3dc8 )
123, 2023 4:50:52 下午 org.hibernate.dialect.Dialect <init>
信息: Using dialect: org.hibernate.dialect.MySQLDialect
123, 2023 4:50:52 下午 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
信息: Using default transaction strategy (direct JDBC transactions)
123, 2023 4:50:52 下午 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
信息: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Automatic flush during beforeCompletion(): disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Automatic session close at end of transaction: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC batch size: 15
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC batch updates for versioned data: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Scrollable result sets: enabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC3 getGeneratedKeys(): enabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Connection release mode: auto
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Maximum outer join fetch depth: 2
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Default batch fetch size: 1
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Generate SQL with comments: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Order SQL updates by primary key: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
信息: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
123, 2023 4:50:52 下午 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
信息: Using ASTQueryTranslatorFactory
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Query language substitutions: {}
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JPA-QL strict compliance: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Second-level cache: enabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Query cache: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory createCacheProvider
信息: Cache provider: org.hibernate.cache.NoCacheProvider
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Optimize cache for minimal puts: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Structured second-level cache entries: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Statistics: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Deleted entity synthetic identifier rollback: disabled
123, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Default entity-mode: pojo
123, 2023 4:50:52 下午 org.hibernate.impl.SessionFactoryImpl <init>
信息: building session factory
Exception in thread "main" java.lang.ExceptionInInitializerError
    at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
    at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
    at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:111)
    at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
    at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:269)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:425)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1218)
    at com.mr.contact.hibernate.HibernateInitialize.<clinit>(HibernateInitialize.java:20)
    at com.mr.contact.dao.DAOimpl.selectUsableCustomer(DAOimpl.java:236)
    at frame.MainFrame.getUsableModleSoure(MainFrame.java:52)
    at frame.MainFrame.initTable(MainFrame.java:42)
    at frame.MainFrame.init(MainFrame.java:35)
    at com.mr.contact.swing.ContactFrame.<init>(ContactFrame.java:50)
    at frame.MainFrame.<init>(MainFrame.java:22)
    at frame.MainFrame.main(MainFrame.java:87)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6f27a732
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    at net.sf.cglib.core.ReflectUtils$2.run(ReflectUtils.java:56)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at net.sf.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:46)
    ... 28 more


我的解答思路和尝试过的方法

照理说和书上的步骤一模一样,不应该出现问题的,我多次尝试修改xml文件中数据库的URL,没有多大效果,我认为是URL有问题,但是我用DataGrip查询我连接的MySQL数据库,他的IP只显示“localhost”

我想要达到的结果

本人不是计算机专业的,有点外行,希望懂的人能帮帮忙,有点急,需要尽快解决不然毕设进度跟不上,各位的意见一经采纳,我请您喝两杯奶茶。

  • 写回答

3条回答 默认 最新

  • 阳光宅男xxb 2023-01-23 18:36
    关注

    首先,确认数据库正确连接:
    检查数据库能连接上吗,用数据库连接工具能打开看到数据库表吗。
    其次,你用的jdk版本是多少, JDK 8 中有关反射相关的功能自从 JDK 9 开始就已经被限制了,为了兼容原先的版本,需要在运行项目时添加 --add-opens java.base/java.lang=ALL-UNNAMED 选项来开启这种默认不被允许的行为。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月31日
  • 已采纳回答 1月23日
  • 创建了问题 1月23日

悬赏问题

  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示