关于Hibernate里hibernate.properties not found的问题及数据库方言更新问题

这两天一直在解决这个问题,也查阅了很多资料,实在是心酸的不行。现在终于调试出来了,这么过分一定要发博客!

首先先说明一下,我用的是Hibernate 5.2和MySQL 5.7的版本!
划重点!!——————————————————————————————*

不同的版本之间用的方法是不同的!楼主就是死在这些不同的版本使用不同的方法和名称上面!请各位程序员一定要确定好自己的Hibernate、SQL版本!不然就会像我这样,死了很多次都死不出来。

——————————————————————————————————–

首先我参考了很多地方,关于not found问题的话总结以下2点:

1如果代码没有逻辑和语法错误,但是出现了NOT FOUND 提示

.你可以不用管这个提示(前提是在你所有的代码都正确,cfg文件关联也正确的情况下)因为我现在发现之前我错的时候以及现在修改正确的时候,这个提示也是仍旧存在的。你可以把它当做是一个warning ,而不是一个必须修改的error.

因为在Hibernate里面,properties文件和cfg.xml文件都是用来配置的,但是如果Hibernate文件是默认先看xml的配置的,如果有xml文件的话就不会去看Properties了,properties文件是在比较老的hibernate版本里使用的。所以我们配置了xml文件就可以不用管这个提示了。就像我现在成功了之后照样有这个提示一样。

成功之后还是有not found提示,但是可以不用管了

2 如果代码有错误的话,那请参考以下操作。

因为我不确定你的错误在哪些地方,所以我把我自己的配置文件什么的贴出来 自行对照。

2.1首先你的文件位置一定要摆放好。
student.hbm.xml文件和student.java文件最好是放在一个包下面。然后hibernate.cfg.xml一定是放在src文件下。因为在创建回话工厂的时候如果你没有写cfg文件的路径,系统是默认去src文件下寻找配置文件的。(如果自己喜欢写路径的朋友,那就没问题了,反正我是不会写路径的……比较麻烦还容易出错)
因此我的文件摆放如图所示

这里写图片描述
记得要导入hibernate/required文件下的所有jar包和mysql的驱动哟。

2.2 hibernate.cgf.xlm配置

<?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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/db</property>
<property name="connection.username">root</property>
<property name="connection.password">111111</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect 注意新版的MYSQL5.7的方言是org.hibernate.dialect.MySQL5InnoDBDialect 不要弄错了!这里错了也出不来的  -->
    <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- Disable the second-level cache-->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.format_sql">true</property>
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<mapping class="config.student"/>
<mapping resource="config/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>

配置文件里要注意的地方就是

<mapping resource="config/student.hbm.xml"/>和
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

这两句话了。MYSQL5.7的方言表达一定要注意。而配置文件的关联记得包下的文件之间是用斜杆而不是点

2.3 student.hmb.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-8-23 13:22:25 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="config.student" table="student">
    <id name="id" >
        <column name='s_id'></column>
    </id>
    <property name="name" >
        <column name="name"></column>
    </property>
    <property name="sex" >
        <column name='sex'></column>
    </property>
</class>
</hibernate-mapping>

这里要注意的是这句话
http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd“>
网上我们找到的版本基本都是
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd“>
我在调试的时候发现提示是说第二个表达已经被抛弃了 ,现在我们用的是第一个。

2.4 student.java

package config;
public class student {
private int id;
private String name;
private String sex;
public student(int a,String b,String c)
{
this.id=a;
this.name=b;
this.sex=c;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}

2.5 studenttest.java

package test;
import static org.junit.Assert.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import config.student;
public class studenttest {
@Test
public void testSaveStudents() {
    student student = new student(2,"皮皮猪","female");
SessionFactory sf=new Configuration().configure().buildSessionFactory();
    Session session=sf.openSession();
    session.beginTransaction();
    session.save(student);
    session.getTransaction().commit();
    session.close();
    sf.close();
    }
}
这里最最最重要的就是创建会话工厂了。
不同的版本创建的方法也是完全不一样的。hibernate 4\5的创建方法又完全不一样。有些方法已经废弃了。在这里我肯保证的是这个方法对于Hibernate5.2的版本绝对能用,5.3应该也可以但是我没试过。

下面我贴出来官方的创建方法(我用官方用户指南里的方法反而创建不成功回话工厂,这让我非常的惆怅。大家可以去试试,如果成功了请告诉一下我谢谢!)
Example 4. Obtaining the org.hibernate.SessionFactory

protected void setUp() throws Exception {
// A SessionFactory is set up once for an application!
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
        .configure() // configures settings from hibernate.cfg.xml
        .build();
try {
    sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
    // The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
    // so destroy it manually.
    StandardServiceRegistryBuilder.destroy( registry );
}
}

Example 6. Obtaining a list of entities

session = sessionFactory.openSession();
session.beginTransaction();
List result = session.createQuery( "from Event" ).list();
for ( Event event : (List<Event>) result ) {
    System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );
}
session.getTransaction().commit();
session.close();

如果大家看我说的不太明白的话 ,这里请参考一下这个优秀的同学写的哟~
https://bbs.csdn.net/topics/391955731

<think>好的,用户的问题是关于如何在Apollo配置管理中心中使用OceanBase数据库的连接设置和使用教程。我需要先理解Apollo的基本结构和数据库配置方式。 首先,Apollo通常支持多种数据库,比如MySQL,而用户想切换到OceanBase。根据引用3中的信息,Apollo迁移到达梦数据库时修改了application.properties文件中的数据库驱动和方言。类似地,OceanBase兼容MySQL协议,所以可能需要类似的配置调整。 接下来,我需要确认OceanBase的JDBC驱动和连接参数。OceanBase的驱动类可能与MySQL不同,比如使用com.oceanbase.jdbc.Driver,而连接URL可能包含特定的集群和租户信息。同时,要注意依赖管理中是否需要引入OceanBase的JDBC驱动包,可能需要用户手动下载或通过Maven添加。 然后,用户可能需要配置数据库方言,比如Hibernate的Dialect。如果OceanBase与MySQL兼容,可能可以使用MySQL的方言,但最好确认OceanBase是否有自己的方言类。引用3中达梦使用了DmDialect,所以OceanBase可能有类似的设置。 另外,用户可能需要创建数据库和表结构。Apollo的数据库初始化脚本通常是针对MySQL的,但由于OceanBase兼容MySQL,可能可以直接运行相同的SQL脚本。不过需要确保脚本中没有使用OceanBase不支持的特性。 最后,启动Apollo服务并进行测试,确保配置中心能正常连接OceanBase。如果遇到问题,可能需要检查日志中的连接错误,比如驱动类是否正确,网络是否通畅,权限是否足够等。 总结步骤应该是:修改配置文件中的驱动、URL、用户名密码;添加OceanBase的JDBC依赖;初始化数据库;启动并测试。同时提醒用户注意OceanBase的版本兼容性和可能需要的参数调整,如连接参数中的集群信息。</think>### 如何在Apollo配置管理中心中使用OceanBase数据库 #### 1. **环境准备** - **OceanBase 数据库部署**:确保已部署OceanBase集群并创建目标租户及数据库。 - **Apollo 项目结构**:下载最新版Apollo配置中心(参考[Apollo GitHub仓库](https://github.com/apolloconfig/apollo)),解压后重点关注配置文件`application.properties`。 #### 2. **修改数据库连接配置** 在Apollo的配置文件`application.properties`中,替换原有的MySQL配置为OceanBase兼容参数。由于OceanBase高度兼容MySQL协议,配置方式类似,但需注意驱动类和连接URL的差异: ```properties # 注释或删除原有MySQL配置 # spring.datasource.url = jdbc:mysql://localhost:3306/apolloconfigdb?useSSL=false # spring.datasource.username = root # spring.datasource.password = 123456 # spring.datasource.driver-class-name = com.mysql.jdbc.Driver # 新增OceanBase配置(示例) spring.datasource.url = jdbc:oceanbase://10.0.0.1:2883/apolloconfigdb?useSSL=false&useUnicode=true&characterEncoding=utf8 spring.datasource.username = ob_user@tenant_name spring.datasource.password = ob_password spring.datasource.driver-class-name = com.oceanbase.jdbc.Driver ``` **关键参数说明**: - `jdbc:oceanbase://`:OceanBase的JDBC协议头。 - `@tenant_name`:OceanBase租户名需包含在用户名中[^1]。 - 端口`2883`为OceanBase默认的MySQL模式访问端口。 #### 3. **依赖管理** 若使用Maven项目,需在`pom.xml`中添加OceanBase JDBC驱动依赖: ```xml <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.0</version> </dependency> ``` 若手动部署,需将驱动包(如`oceanbase-client-2.4.0.jar`)放入Apollo服务端的`lib`目录下。 #### 4. **数据库初始化** 执行Apollo的MySQL初始化脚本(如`apolloconfigdb.sql`)于OceanBase数据库。由于OceanBase兼容MySQL语法,通常可直接运行。若遇到不支持的语法(如特定存储引擎),需调整脚本: ```sql -- 修改示例:移除不支持的ENGINE=InnoDB CREATE TABLE `App` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Name` varchar(500) NOT NULL DEFAULT '' ) /*!40100 DEFAULT CHARACTER SET utf8mb4 */; ``` #### 5. **启动与验证** 1. 启动Apollo服务端: ```bash ./scripts/startup.sh ``` 2. 检查日志`apollo-configservice.log`,确认无`Connection refused`或`Driver not found`错误。 3. 访问`http://localhost:8070`进入Apollo管理界面,验证是否能正常读写配置。 #### 6. **注意事项** - **网络连通性**:确保Apollo服务端可访问OceanBase的2883端口。 - **租户资源**:为Apollo数据库分配足够的Unit资源,避免OBServer节点负载过高。 - **兼容性工具**:使用OMA(OceanBase Migration Assessment)评估迁移风险。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值