问题遇到的现象和发生背景
学校要求对着书做毕业设计,课题是《基于hibernate的通讯录系统》,我按照书上介绍一步一步做应该没有问题,但是程序却报错。使用的语言是java,开发平台使用的是EclipseEE,用的是javaSE1.8,框架使用的是hibernate,数据库用的是MySQL。
遇到的现象和发生背景,请写出第一个错误信息
导入JAR包,将程序按要求复制上去之后运行,报错。我自己写程序的时候就报错,我以为是我程序错误,为保证绝对正确我复制了书作者提供的程序,依旧报错。
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
我的项目结构如下:
完整的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>
运行结果及详细报错内容
完整的报错信息如下:
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Environment <clinit>
信息: Hibernate 3.2.0
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Environment <clinit>
信息: hibernate.properties not found
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Environment buildBytecodeProvider
信息: Bytecode provider name : cglib
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Environment <clinit>
信息: using JDK 1.4 java.sql.Timestamp handling
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Configuration configure
信息: configuring from resource: /hibernate.cfg.xml
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Configuration getConfigurationInputStream
信息: Configuration resource: /hibernate.cfg.xml
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Configuration addResource
信息: Reading mappings from resource: pojo/User.hbm.xml
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: pojo.User -> tb_users
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Configuration addResource
信息: Reading mappings from resource: pojo/Customer.hbm.xml
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: pojo.Customer -> tb_customer_info
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Configuration addResource
信息: Reading mappings from resource: pojo/Communication.hbm.xml
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
信息: Mapping class: pojo.Communication -> tb_communication_info
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.Configuration doConfigure
信息: Configured SessionFactory: null
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.HbmBinder bindCollectionSecondPass
信息: Mapping collection: pojo.Customer.communicationList -> tb_communication_info
1月 23, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: Using Hibernate built-in connection pool (not for production use!)
1月 23, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: Hibernate connection pool size: 20
1月 23, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: autocommit mode: false
1月 23, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/test02
1月 23, 2023 4:50:52 下午 org.hibernate.connection.DriverManagerConnectionProvider configure
信息: connection properties: {password=****, user=root}
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: RDBMS: MySQL, version: 5.7.31-log
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC driver: MySQL Connector Java, version: mysql-connector-java-5.1.36 ( Revision: 4fc1f969f740409a4e03750316df2c0e429f3dc8 )
1月 23, 2023 4:50:52 下午 org.hibernate.dialect.Dialect <init>
信息: Using dialect: org.hibernate.dialect.MySQLDialect
1月 23, 2023 4:50:52 下午 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
信息: Using default transaction strategy (direct JDBC transactions)
1月 23, 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)
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Automatic flush during beforeCompletion(): disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Automatic session close at end of transaction: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC batch size: 15
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC batch updates for versioned data: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Scrollable result sets: enabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC3 getGeneratedKeys(): enabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Connection release mode: auto
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Maximum outer join fetch depth: 2
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Default batch fetch size: 1
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Generate SQL with comments: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Order SQL updates by primary key: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
信息: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
1月 23, 2023 4:50:52 下午 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
信息: Using ASTQueryTranslatorFactory
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Query language substitutions: {}
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: JPA-QL strict compliance: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Second-level cache: enabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Query cache: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory createCacheProvider
信息: Cache provider: org.hibernate.cache.NoCacheProvider
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Optimize cache for minimal puts: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Structured second-level cache entries: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Statistics: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Deleted entity synthetic identifier rollback: disabled
1月 23, 2023 4:50:52 下午 org.hibernate.cfg.SettingsFactory buildSettings
信息: Default entity-mode: pojo
1月 23, 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”
我想要达到的结果
本人不是计算机专业的,有点外行,希望懂的人能帮帮忙,有点急,需要尽快解决不然毕设进度跟不上,各位的意见一经采纳,我请您喝两杯奶茶。