mysql - 如何使用 hibernate.default_schema 和 hibernate.default_catalog
问题描述
我在我提到的休眠配置文件中使用 Mysql 和更早的版本
<property name="hibernate.connection.url">jdbc:mysql://localhost/TestDB</property>
作为连接网址,TestDB
我要连接的架构在哪里。
我想将配置文件中的默认架构指定为
<property name="hibernate.connection.url">jdbc:mysql://localhost</property>
<property name="hibernate.default_schema">TestDB</property>
但它不是以这种方式工作的,它给了我一个错误,说
java.sql.SQLException: No database selected
谁能帮我举个例子来说明如何在休眠配置文件中使用hibernate.default_schema
, ?hibernate.default_catalog
解决方案
您应该使用hibernate.default_catalog
而不是hibernate.default_schema
.
根据 MySql文档,连接 url 应具有以下格式:
protocol//[hosts][/database][?properties]
在哪里
数据库
要打开的默认数据库或目录。如果未指定数据库,则在没有默认数据库的情况下建立连接。在这种情况下,要么调用实例
setCatalog()
上的方法,要么在 SQL 语句中Connection
使用数据库名称(即...)指定表名。SELECT dbname.tablename.colname FROM dbname.tablename
在不指定要使用的数据库的情况下打开连接通常仅在构建与多个数据库一起使用的工具时有用,例如 GUI 数据库管理器。
假设我们有以下 MySql 数据库:
create database DB_A;
create database DB_B;
create table DB_A.TST_EMPLOYEE(
emp_id int primary key,
emp_name varchar(100)
);
create table DB_B.TST_EMPLOYEE(
emp_id int primary key,
emp_name varchar(100)
);
那么我们可以hibernate.cfg.xml
通过以下方式指定数据库连接:
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306</property>
<property name="hibernate.default_catalog">DB_A</property>
<property name="hibernate.connection.username">your_user</property>
<property name="hibernate.connection.password">your_pass</property>
以下列方式为DB_A.TST_EMPLOYEE
和表声明实体:DB_B.TST_EMPLOYEE
@Entity
@Table(name = "TST_EMPLOYEE")
public class EmployeeA
{
// ...
}
@Entity
@Table(name = "TST_EMPLOYEE", catalog = "DB_B")
public class EmployeeB
{
// ...
}
然后以通常的方式使用它们。此外,对于本机查询,您可以使用属性{h-catalog}
中指定的默认目录的占位符。hibernate.default_catalog
PS我不得不说,目录和模式概念在数据库之间可能具有完全不同的含义。请参阅this以供参考。
推荐阅读
- celery - 芹菜每分钟都在击败跑步任务,甚至认为它设置为每两个小时
- reactjs - 反应无阴影规则处理
- macos - 如何在 Maven 中查找/创建 settings-security.xml 文件
- sql - 具有多列的 Order by 子句的语法不正确
- wpf - WPF: How to override PART_CellBorder style of GridViewCell?
- leaflet - 显示的缩放级别与平铺缩放级别:像素密度?
- java - How to convert UTC DateTime to another Time Zone using Java 8 library?
- forth - 如何在 Forth 中创建数组?
- ios - How to resume the CAAnimation group after cell reuse?
- reactjs - Redux Form - how to disable sync/async validation with a flag