Вы должны использовать hibernate.default_catalog
вместо hibernate.default_schema
.
В соответствии с MySql документацией URL-адрес соединения должен иметь следующий формат:
protocol//[hosts][/database][?properties]
где
база данных
База данных или каталог по умолчанию для открытия. Если база данных не указана, соединение устанавливается без базы данных по умолчанию. В этом случае либо вызовите метод setCatalog()
в экземпляре Connection
, либо укажите имена таблиц, используя имя базы данных (то есть SELECT dbname.tablename.colname FROM dbname.tablename
...) в ваших операторах SQL. Открытие соединения без указания используемой базы данных, как правило, полезно только при создании инструментов, работающих с несколькими базами данных, таких как 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 Я должен сказать, что catalog * 1042 Понятия * и схема могут иметь совершенно разные значения от базы данных к базе данных. См. this для справки.