Мне нужны <класс> элементы в persistence.xml?

Я думаю самая важная вещь с (и на самом деле один из больших результатов, несколько рекурсивным способом), TDD является успешным управлением зависимостями. Необходимо удостовериться, что модули тестируются в изоляции без тщательно продуманной необходимой установки. Например, если Вы тестируете компонент, который в конечном счете посылает электронное письмо, сделайте почтового отправителя зависимостью так, чтобы можно было дразнить его в тестах. Это приводит к второй точке - насмешки являются Вашими друзьями. Будьте ознакомлены с насмешкой платформ и стиля тестов, которые они продвигают (поведенческий, в противоположность классическому базирующемуся состоянию), и проектные решения, которые они поощряют ( "Говорят, не спрашивайте" принцип).

106
задан Joshua Taylor 25 August 2015 в 12:20
поделиться

3 ответа

В файле persistence.xml есть jar-файл , который вы можете использовать. Из учебное пособие по Java EE 5 :

 <настойчивость>
 
 <описание> Это подразделение управляет заказами и клиентами.
 Он не полагается на какие-либо особенности производителя и может
 поэтому может быть развернут у любого поставщика сохраняемости.
 
  jdbc / MyOrderDB 
  MyOrderApp.jar 
  com.widgets.Order 
  com.widgets.Customer 
 

Этот файл определяет блок сохранения состояния. с именем OrderManagement , который использует Источник данных с поддержкой JTA jdbc / MyOrderDB . Элементы jar-файла и class определяют классы управляемой сохраняемости: классы сущностей, встраиваемые классы и сопоставленные суперклассы. Элемент jar-file определяет файлы JAR, которые видны упакованному блоку сохранения состояния, содержащему управляемые классы сохраняемости, а элемент class явно именует управляемые классы сохраняемости.

В этом случае из Hibernate, посмотрите Chapter2. Установка и конфигурация также для получения дополнительных сведений.

РЕДАКТИРОВАТЬ: На самом деле, если вы не возражаете против несоответствия спецификации, Hibernate поддерживает автоматическое обнаружение даже в Java SE. Для этого добавьте свойство hibernate.archive.autodetection :

<persistence-unit name="eventractor" transaction-type="RESOURCE_LOCAL">
  <!-- This is required to be spec compliant, Hibernate however supports
       auto-detection even in JSE.
  <class>pl.michalmech.eventractor.domain.User</class>
  <class>pl.michalmech.eventractor.domain.Address</class>
  <class>pl.michalmech.eventractor.domain.City</class>
  <class>pl.michalmech.eventractor.domain.Country</class>
   -->

  <properties>
    <!-- Scan for annotated classes and Hibernate mapping XML files -->
    <property name="hibernate.archive.autodetection" value="class, hbm"/>

    <property name="hibernate.hbm2ddl.auto" value="validate" />
    <property name="hibernate.show_sql" value="true" />
  </properties>
</persistence-unit>
78
ответ дан 24 November 2019 в 03:51
поделиться

В среде Java SE по спецификации вы должны указать все классы как вы сделали:

Список всех именованных классов управляемой сохраняемости должен быть указан в средах Java SE для обеспечения переносимости

и

Если не предполагается, что аннотированные классы сохраняемости, содержащиеся в корне единицы сохранения состояния должны быть включены в блок сохранения состояния, следует использовать элемент exclude-unlisted-classes. Элемент exclude-unlisted-classes не предназначен для использования в средах Java SE.

(JSR-000220 6.2.1.6)

В средах Java EE вы не должны делать это, поскольку провайдер сканирует для вас аннотации.

Неофициально можно попробовать установить false в вашем persistence.xml. По умолчанию этот параметр имеет значение ложь в EE и истина в SE. Насколько я могу судить, оба EclipseLink и Toplink поддерживают это. Но вы не должны полагаться на его работу в SE, согласно спецификации, как указано выше.

Вы можете ПОПРОБОВАТЬ следующее (может работать или не работать в SE-средах):

<persistence-unit name="eventractor" transaction-type="RESOURCE_LOCAL">
     <exclude-unlisted-classes>false</exclude-unlisted-classes>

    <properties>
            <property name="hibernate.hbm2ddl.auto" value="validate" />
            <property name="hibernate.show_sql" value="true" />
    </properties>
</persistence-unit>
43
ответ дан 24 November 2019 в 03:51
поделиться

Hibernate не поддерживает false в SE (другой автор упомянул, что это работает с TopLink и EclipseLink ).

Существуют инструменты, которые автоматически генерируют список классов в файл persistence.xml, например мастер импорта схемы базы данных в IntelliJ. После того, как у вас есть начальные классы вашего проекта в файле persistence.xml, должно быть просто добавлять/удалять отдельные классы вручную по мере продвижения вашего проекта.

7
ответ дан 24 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: