У меня следующее созвездие: B1.xsd и B2.xsd оба импортируют A.xsd. Использование maven-hyperjaxb3-plugin Я создал классы Java с JPA-аннотациями для B1.xsd и B2.xsd. Таким образом, классы A.xsd создаются в проекте B1.xsd, а также es в проекте B2.xsd. Чтобы использовать эти два набора классов в одном модуле сохранения, я установил через jaxb внешнюю привязку схемы базы данных к каждой Entity, как показано в Editing @java.persitence.Table in external jaxb-Binding.Редактирование параметра имени @ java.persitence.Entity через внешний jaxb-Binding
Проблема, после развертывания в wildfly, wildfly бросает org.hibernate.DuplicateMappingException: дублированный импорт: B1_ClassName относится как к B1_ClassName и B2_ClassName (попробуйте использовать автоматический импорт = \ "ложный \") "}}
так что мне нужно сделать, это редактирование параметра имени в аннотации Entity через JAXB внешнее связывание, так что
@XmlRootElement(name = "B1_Element1")
@Immutable
@Cacheable(true)
@Entity(name = "B1_Element1")
@Table(name = "B1_Element1")
public class B1_Element1
implements Serializable, Equals, HashCode, ToString
{
...
}
будет выглядеть
@XmlRootElement(name = "B1_Element1")
@Immutable
@Cacheable(true)
@Entity(name = "PACKAGE_NAME.B1_Element1")
@Table(name = "B1_Element1")
public class B1_Element1
implements Serializable, Equals, HashCode, ToString
{
...
}
Мои фактические привязок-xjc.xjb выглядит следующим образом
<jaxb:globalBindings localScoping="toplevel">
<xjc:serializable />
</jaxb:globalBindings>
<jaxb:bindings schemaLocation="B1.xsd"
node="/xs:schema">
<hj:persistence>
<hj:default-generated-id name="Hjid">
<orm:generated-value strategy="IDENTITY" />
</hj:default-generated-id>
<hj:default-entity>
<orm:table schema="B1_database_schema" />
</hj:default-entity>
</hj:persistence>
<jaxb:schemaBindings>
<jaxb:package name="b1.package.name" />
</jaxb:schemaBindings>
</jaxb:bindings>
Кто-нибудь имеет представление о том, как я могу изменить параметр Название @ java.persitence.Entity?
Здравствуйте @lexicore, спасибо за Ваш ответ. Я знаю, что это не лучшее решение, но делать сумасшедшие вещи с помощью hyperjaxb более забавно, чем просто использовать стандартные решения :) Есть ли способ редактировать параметр имени (например, давая им префикс) всех сложных типов однажды? Это было бы полезно, потому что у меня их почти 100. – Erzen
@Erzen Ну, если вы хотите хардкор, вот хардкор. Вы можете написать и настроить собственную стратегию именования. Вот [пример] (https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/custom-naming). Внедрите/замените метод 'Naming.getEntityName (...)'. – lexicore