Когда вы генерируете реализацию интерфейса, можно использовать файл XML для переопределения аннотаций SQL в этом интерфейсе. Этот файл XML может также переопределять определение соответствующей функции bean pureQuery. Инструментальная среда может генерировать файл XML, который вы затем можете редактировать.
Чтобы сгенерировать реализацию интерфейса, инструментальная среда вызывает генератор pureQuery. Этот генератор позволяет вам указать файл XML, в котором можно переопределить операторы SQL в аннотациях методов, объявленных в интерфейсе.
Типы, элементы и атрибуты, распознаваемые генератором при проверке файла конфигурации XML, представляют собой поднабор из формальной спецификации для Java Persistence API (JPA).
В проекте может быть только один файл конфигурации XML. После создания файла XML в проекте все последующие созданные вами переопределения интерфейса или функций bean в этом проекте дописываются в этот файл.
Порядок действий:
Чтобы создать класс реализации при помощи файла конфигурации XML:
Предположим, что вы создали проект Java и добавили в него одну функцию bean pureQuery, интерфейс и реализацию этого интерфейса, основанные на таблице ACT базы данных SAMPLE из DB2 для Linux, UNIX и Windows. Вы удаляете эту реализацию, так как хотите перегенерировать ее после переопределения интерфейса и функции bean в файле конфигурации XML. Ваш проект выглядит так:
Щелкните дважды по интерфейсу ActData.java, чтобы открыть его в редакторе Java. Затем щелкните правой кнопкой мыши и выберите Помощь pureQuery > Генерировать XML. Поскольку в проекте еще не было файла XML, вам надо задать имя этого файла. В окне Генерировать XML для класса Java назовите этот файл MyProject.xml и нажмите кнопку Готово. Этот файл появится в папке meta-inf в вашем проекте.
Щелкните дважды по этому файлу XML, чтобы открыть в редакторе XML. Вот содержимое этого файла (информация о пространстве имен пропущена):
<?xml version="1.0" encoding="UTF-8"?> <entity-mappings> <named-native-query name="MyPackage.ActData#getActs()"> <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#getAct(int)"> <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = ?]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#getAct(Act)"> <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = :actno]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#createAct(int, String, String)"> <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( ?, ?, ?)]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#createAct(Act)"> <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( :actno, :actkwd, :actdesc)]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#updateAct(int, String, String, int)"> <query><![CDATA[update ACT set ACTNO = ?, ACTKWD = ?, ACTDESC = ? where ACTNO = ?]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#updateAct(Act)"> <query><![CDATA[update ACT set ACTNO = :actno, ACTKWD = :actkwd, ACTDESC = :actdesc where ACTNO = :actno]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#deleteAct(int)"> <query><![CDATA[delete from ACT where ACTNO = ?]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#deleteAct(Act)"> <query><![CDATA[delete from ACT where ACTNO = :actno]]></query> </named-native-query> </entity-mappings>
Этот файл содержит операторы SQL в аннотациях методов, которые определяет интерфейс.
Теперь щелкните дважды по функции bean pureQuery Act.java, чтобы открыть ее в редакторе Java. Щелкните правой кнопкой мыши и выберите Помощь pureQuery > Генерировать XML. Поскольку теперь файл уже существует, окно Генерировать XML для класса Java не открывается. Инструментальная среда просто дописывает XML в существующий файл конфигурации XML.
Если вы снова посмотрите файл конфигурации XML он будет выглядеть так (информация о пространстве имен снова опущена):
<?xml version="1.0" encoding="UTF-8"?> <entity-mappings> <named-native-query name="MyPackage.ActData#getActs()"> <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#getAct(int)"> <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = ?]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#getAct(Act)"> <query><![CDATA[select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = :actno]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#createAct(int, String, String)"> <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( ?, ?, ?)]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#createAct(Act)"> <query><![CDATA[insert into ACT (ACTNO, ACTKWD, ACTDESC) values( :actno, :actkwd, :actdesc)]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#updateAct(int, String, String, int)"> <query><![CDATA[update ACT set ACTNO = ?, ACTKWD = ?, ACTDESC = ? where ACTNO = ?]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#updateAct(Act)"> <query><![CDATA[update ACT set ACTNO = :actno, ACTKWD = :actkwd, ACTDESC = :actdesc where ACTNO = :actno]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#deleteAct(int)"> <query><![CDATA[delete from ACT where ACTNO = ?]]></query> </named-native-query> <named-native-query name="MyPackage.ActData#deleteAct(Act)"> <query><![CDATA[delete from ACT where ACTNO = :actno]]></query> </named-native-query> <entity class="MyPackage.Act"> <attributes> <id name="ACTNO"> <column name="actno"/> <generated-value/> </id> <basic name="ACTNO"> <column name="actno"/> </basic> <basic name="ACTDESC"> <column name="actdesc"/> </basic> <basic name="ACTKWD"> <column name="actkwd"/> </basic> </attributes> </entity> <entity-mappings>