Разница в Environment.DEFAULT_SCHEMA и базе данных в Hibernate - PullRequest
0 голосов
/ 17 сентября 2011

Чем отличается Hibernate от
cfg.setProperty(Environment.DEFAULT_SCHEMA, "exampleDB");

с
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/exampleDB</property>

Являются ли схема и БД по умолчанию в URL-адресе соединения совершенно разными вещами?
Я заметил, что если я опущу настройку Environment.DEFAULT_SCHEMA и сделаю следующее:

Configuration cfg = new Configuration();
System.out.println("Default schema:"+cfg.getProperty(Environment.DEFAULT_SCHEMA));
sessionFactory = cfg.configure().buildSessionFactory();

На консоли печатается: Default schema:null.

Так в чем же смысл Environment.DEFAULT_SCHEMA и разница с подключением БД?

Ответы [ 3 ]

2 голосов
/ 17 сентября 2011

Свойство схемы по умолчанию используется, когда ваш администратор базы данных создает несколько схем в одной базе данных.Я видел это с postgres, где каждый использует один URL базы данных, но под этим существуют отдельные схемы для каждого приложения.

Используя свойство схемы по умолчанию, оно позволяет вам исключить имена схем из ваших сущностей.Это особенно полезно, если вы запускаете тесты для HSqlDB, который не поддерживает схемы, и вы развертываете для БД, использующей схемы.Наличие нулевого значения означает, что оно по умолчанию возвращается к схеме по умолчанию БД.

1 голос
/ 17 сентября 2011

Установка свойства hibernate заставляет hibernate квалифицировать все имена таблиц в sql, который он выдает, т.е. вместо

select count(*)
from mytable

это пошло бы

select count(*)
from myschema.mytable

в базу данных.

Эффект добавления в строку подключения зависит от базы данных. Некоторые базы данных (например, Oracle) не поддерживают указание схемы по умолчанию в строке подключения. ( источник * +1010 *)

1 голос
/ 17 сентября 2011

ссылаются на http://www.youtube.com/watch?v=ReAZmA83Myg&feature=related и http://www.java -forums.org / database / 1467-variable-hibernate-cfg-xml-file.html

что японять: в hibernate.cfg.xml вы можете настроить

<property name="hibernate.default_schema">exampleDB</property>

или создать файл hibernate.cfg во время выполнения;

cfg.setProperty(Environment.DEFAULT_SCHEMA, "exampleDB");

как создать схему по умолчанию дляпозднее использовать;

new SchemaExport(config).create(true,true); //First parameter (true) creates new schema

edit: и другая ссылка: http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/cfg/Environment.html

Предоставляет доступ к информации о конфигурации, передаваемой в объектах Properties.

Hibernate имеет две области свойств:

Factory-level properties may be passed to the SessionFactory when it instantiated. Each instance might have different property values. If no properties are specified, the factory calls Environment.getProperties().
System-level properties are shared by all factory instances and are always determined by the Environment properties. 

Единственными свойствами системного уровня являются

hibernate.jdbc.use_streams_for_binary
hibernate.cglib.use_reflection_optimizer 

Свойства среды заполняются вызовом System.getProperties (), а затем из ресурса с именем / hibernate.свойства, если он существует.Системные свойства переопределяют свойства, указанные в hibernate.properties.

SessionFactory управляется следующими свойствами.Свойства могут быть либо Системными свойствами, либо свойствами, определенными в ресурсе с именем /hibernate.properties, либо экземпляром java.util.Properties, переданным в Configuration.buildSessionFactory ()

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...