初学hibernate时,配置核心配置文件时出错,现将错误记下,并附上解决方法
1:org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [hibernate.cfg.xml]
找不到hibernate.cfg.xml配置文件,下面是原来出错的代码
@Test
//保存客户信息
public void demo1(){
// 1.加载Hibernate的核心配置文件
Configuration configuration = new Configuration().configure();
// 手动加载映射
//configuration.addResource("com/learnning/hibernate/demo1/Customer.hbm.xml");
// 2.创建一个SessionFactory对象:类似于JDBC中连接池
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3.通过SessionFactory获取到Session对象:类似于JDBC中Connection
Session session = sessionFactory.openSession();
// 4.手动开启事务:
Transaction transaction = session.beginTransaction();
// 5.编写代码
Customer customer = new Customer();
customer.setCust_name("张三");
session.save(customer);
// 6.事务提交
transaction.commit();
// 7.资源释放
session.close();
sessionFactory.close();
}
修改为:
// 1.加载Hibernate的核心配置文件
Configuration configuration = new Configuration().configure("com/learnning/hibernate/demo1/hibernate.cfg.xml");
参考链接:https://blog.csdn.net/Shipley_Leo/article/details/77887612
2:Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
数据库连接编码错误:原来错误的配置文件内容
<?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.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernat_learning</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 配置Hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- ================== 可选配置 ===================== -->
<!-- hibernate 打印SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- hibernate 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 引入映射文件 -->
<mapping resource="com/learnning/hibernate/demo1/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
将数据库连接配置修改为(仍然报错):
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernat_learning?useUnicode=true&characterEncoding=utf8
错误信息如下:
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,130]
Message: 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:470)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:448)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:420)
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:126)
... 27 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,130]
Message: 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604)
at com.sun.xml.internal.stream.XMLEventReaderImpl.peek(XMLEventReaderImpl.java:276)
at javax.xml.stream.util.EventReaderDelegate.peek(EventReaderDelegate.java:104)
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor$NamespaceAddingEventReader.peek(JaxbCfgProcessor.java:254)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXEventConnector.handleCharacters(StAXEventConnector.java:164)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXEventConnector.bridge(StAXEventConnector.java:126)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:445)
... 29 more
参考链接:
https://blog.csdn.net/amesvan/article/details/80938145
最终解决方法:是因为XML无法解析特殊字符(&)
方法1:使用CDATA部件,CDATA部件在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束:
<property name="hibernate.connection.url"><![CDATA[jdbc:mysql://localhost:3306/hibernat_learning?useUnicode=true&characterEncoding=utf8]]></property>
方法二:使用(& & )代替(&)
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernat_learning?useUnicode=true&characterEncoding=utf8
参考链接: