Я думаю самая важная вещь с (и на самом деле один из больших результатов, несколько рекурсивным способом), TDD является успешным управлением зависимостями. Необходимо удостовериться, что модули тестируются в изоляции без тщательно продуманной необходимой установки. Например, если Вы тестируете компонент, который в конечном счете посылает электронное письмо, сделайте почтового отправителя зависимостью так, чтобы можно было дразнить его в тестах. Это приводит к второй точке - насмешки являются Вашими друзьями. Будьте ознакомлены с насмешкой платформ и стиля тестов, которые они продвигают (поведенческий, в противоположность классическому базирующемуся состоянию), и проектные решения, которые они поощряют ( "Говорят, не спрашивайте" принцип).
В файле 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>
В среде Java SE по спецификации вы должны указать все классы как вы сделали:
Список всех именованных классов управляемой сохраняемости должен быть указан в средах Java SE для обеспечения переносимости
и
Если не предполагается, что аннотированные классы сохраняемости, содержащиеся в корне единицы сохранения состояния должны быть включены в блок сохранения состояния, следует использовать элемент exclude-unlisted-classes. Элемент exclude-unlisted-classes не предназначен для использования в средах Java SE.
(JSR-000220 6.2.1.6)
В средах Java EE вы не должны делать это, поскольку провайдер сканирует для вас аннотации.
Неофициально можно попробовать установить
в вашем 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>
Hibernate не поддерживает
в SE (другой автор упомянул, что это работает с TopLink и EclipseLink ).
Существуют инструменты, которые автоматически генерируют список классов в файл persistence.xml, например мастер импорта схемы базы данных в IntelliJ. После того, как у вас есть начальные классы вашего проекта в файле persistence.xml, должно быть просто добавлять/удалять отдельные классы вручную по мере продвижения вашего проекта.