2012-06-12 5 views
2

This page предлагает УЧРЕЖДЕНИЯ:зимуют ЛИЦО

Если вы хотите, чтобы избежать дублирования, рассмотреть возможность использования XML-объектов (для например, [] в декларации DOCTYPE и% allproperties, в отображении!).

Проблема в том, что я не могу найти нигде в Интернете полный рабочий пример.

То, что я получил до сих пор:

<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" 
     [ <!ENTITY allproperties SYSTEM "allproperties.xml"> ] 
     > 

.. но как насчет остальных?
1. КАК ТОЧНО определить свойства в файле allproperties.xml?
2. Как/где ТОЧНО я включаю ключевое слово %allproperties; (в пределах моих <class> и <union-class>)?

ответ

3

Это базовая конструкция XML, называемая сущностью. Файл с именем «allproperties.xml» будет содержать фрагменты отображения свойств объектов. Например:

<property name="name".../> 
<property name="someOtherProperty".../> 
<!-- rest of shared property definitions --> 

Затем в файле отображения, вы бы сказали:

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [ 
    <!ENTITY allproperties SYSTEM "allproperties.xml"> ]> 

<hibernate-mapping> 
    <class name="Class1" ...> 
     <id .../> 
     &allproperties; 
    </class> 
    <class name="Class2" ...> 
     <id .../> 
     &allproperties; 
    </class> 
</hibernate-mapping> 

Я определил отображение в каждом классе здесь, но вы можете переместить, что в заголовочном файле, а если информация одинаковая. Все, что является действительным в качестве дочернего элемента <class/>, будет работать во включенном файле.

JAXP ожидает, что ссылки SYSTEM будут относительными или абсолютными ссылками на файлы. Таким образом, выше означает, что файл allproperties.xml будет разрешен относительно системного идентификатора включенного файла. Часто это может не сработать так хорошо. С этой целью Hibernate также понимает специальный тип ссылки SYSTEM с префиксом classpath: //. Как вы могли ожидать, это вызовет поиск ресурсов классаpath для ресурса, на который ссылается.

<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [ 
    <!ENTITY allproperties SYSTEM "classpath://com/acme/allproperties.xml"> ]> 

Теперь allproperties.xml будет решена с помощью поиска пути к классам, используя/ACME/allproperties.xml имя ресурса ком.

+0

Забыл упомянуть, что Hibernate также понимает специальный тип ссылки SYSTEM с префиксом 'classpath: //'. Как вы могли ожидать, это вызовет поиск ресурсов классаpath для ресурса, на который ссылается. В противном случае JAXP ожидает, что ссылки SYSTEM будут относительными или абсолютными ссылками на файлы. Будет редактировать ответ, чтобы показать этот вариант. –