Hyperjaxb игнорирует настройку в binding.xjb

Я использую hyperjaxb3, и он успешно решает большинство моих проблем.

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

Проблема в том, что внутри bindings.xjb я пытаюсь изменить сгенерированное имя таблицы для одного из моих объектов, но независимо от того, что я пытаюсь сделать, установленное значение полностью игнорируется.

Это содержимое связанных файлов:

XSD-файл (просто фрагмент)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://.../es/xbrl/eu/model/concept-statement" xmlns:fws="http://.../es/xbrl/eu/model/concept-statement">
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>

    <xs:element name="structure">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="fws:module"/>
            </xs:sequence>
        </xs:complexType>
     </xs:element>

bindings.xjb

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
    version="2.1"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
    xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
    jaxb:extensionBindingPrefixes="hj orm">

    <jaxb:bindings schemaLocation="concept-statement.xsd" node="/xs:schema">
        <jaxb:schemaBindings>
            <jaxb:package name="es.company.cirbe.cubo.hechos.modelo"/>
        </jaxb:schemaBindings>
        <jaxb:globalBindings localScoping="toplevel">
            <jaxb:serializable/>
        </jaxb:globalBindings>
        <jaxb:bindings node="xs:element[@name='structure']">
            <hj:entity>
                <orm:table name="FACTS_STRUCTURE"/>
            </hj:entity>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

pom.xml (только зависимости и часть сборки)

<dependencies>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.2.11</version>
    </dependency>
    <dependency>
        <groupId>org.jvnet.hyperjaxb3</groupId>
        <artifactId>hyperjaxb3-ejb-runtime</artifactId>
        <version>0.6.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.jvnet.hyperjaxb3</groupId>
            <artifactId>maven-hyperjaxb3-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <debug>false</debug>
                <extension>true</extension>
                <variant>ejb</variant>
                <generateDirectory>src/main/java</generateDirectory>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/persistence.xml</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

Созданный Java-файл

@XmlRootElement(name = "structure")
@Entity(name = "Structure")
@Table(name = "STRUCTURE_")
@Inheritance(strategy = InheritanceType.JOINED)
public class Structure
    implements Serializable, Equals, HashCode
{
}

Я абсолютно уверен, что файл привязок читается: я проверил оба журнала maven и, если я установил какие-то странные значения для выражений xpath, я получаю связанное с ними исключение времени выполнения.

Кроме того, это не только игнорирование настройки имени таблицы. Я пытался изменить имя объекта, схему, установить другую длину столбца для простого атрибута... Во всех этих тестах вывод всегда был таким же, как я скопировал выше.

И я также проверил существующие образцы, но не смог понять, что я делаю неправильно.

С Уважением


person Ivan Clavijos    schedule 17.09.2015    source источник


Ответы (1)


Хорошо, проблема найдена, и она была связана со структурой моего XSD-файла.

Просто используя

xs:element[@name='structure']

на моем файле привязок не хватило. Как кажется, настройка сопоставления таблиц работает только в том случае, если она связана с комплексными типами, поэтому, как только я изменил это на

xs:element[@name='structure']/xs:complexType

все заработало как надо :)

Надеюсь, это поможет кому-то в будущем.

person Ivan Clavijos    schedule 18.09.2015
comment
Автор hyperjaxb здесь. Это правильное решение. Я как раз собирался опубликовать это. - person lexicore; 18.09.2015