Я пытаюсь создать аннотированный java-класс JPA с помощью hyperjaxb, но поразил одну проблему. Любое предложение приветствуется: -hyperjaxb extra underscore (_), сгенерированный в @column для некоторых столбцов одного символа
частичная ..Pom.xml
<!-- hyperjaxb -->
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>0.6.4</version>
</dependency>
<dependency>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.5.6</version>
</dependency>
...
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.5.6</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
<executions>
<execution>
<id>1</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<forceRegenerate>true</forceRegenerate>
<schemaDirectory>${basedir}/src/main/resources/schemas/demo</schemaDirectory>
<schemaIncludes>
<schemaInclude>demo.xsd</schemaInclude>
</schemaIncludes>
<generatePackage>com.fsi.demo</generatePackage>
<strict>true</strict>
<extension>true</extension>
</configuration>
</execution>
</executions>
</plugin>
Вот demo.xsd: -
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="demo">
<xs:complexType>
<xs:sequence>
<xs:element ref="playerID" />
<xs:element ref="G"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="playerID" type="xs:string" />
<xs:element name="G" type="xs:string" />
</xs:schema>
Вот сгенерированного класса Java
public class Demo
implements Equals, HashCode
{
@XmlElement(required = true)
protected String playerID;
@XmlElement(name = "G", required = true)
protected String g;
@XmlAttribute(name = "Hjid")
protected Long hjid;
....
...
/**
* Gets the value of the g property.
*
* @return
* possible object is
* {@link String }
*
*/
@Basic
@Column(name = "G_", length = 255)
public String getG() {
return g;
}
/**
* Sets the value of the g property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setG(String value) {
this.g = value;
}
}
Дополнительное подчеркивание @ Колонна (имя = "G_", длина = 255) нарушает мой код, так как hibernate жалуется на недопустимое сопоставление столбцов.
То, что я пытался до сих пор, что не имел никакого влияния на эту проблему: - 1) Встроенные пользовательские привязки в demo.xsd
<xs:annotation>
<xs:appinfo>
<jxb:property name="G" />
</xs:appinfo>
</xs:annotation>
и
<xs:annotation>
<xs:appinfo>
<orm:attribute-override name="G">
<orm:column name="G" />
</orm:attribute-override>
</xs:appinfo>
</xs:annotation>
что я здесь отсутствует, кто угодно!
ОБНОВЛЕНИЕ: спящий режим запроса ниже: - гибернации:
выберите demo0_.PLAYERID как PLAYERID1_0_, demo0_.G_, как G_2_0_ от ДЕМОНСТРАЦИОННОМ demo0_ где demo0_.PLAYERID в ( )
Просмотров:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'demo0_.G_' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
и справедливо, как фактическая колонка G и НЕ G_, сгенерированный hyperjaxb, изменяя его G (вручную) решает эту проблему
Почему отображение столбцов недопустимо? – lexicore
, поскольку столбец, генерируемый гиперяксом, содержит дополнительные _ (** G _ ** вместо ** G **). ** NB: ** ОБНОВЛЕНО исходный вопрос с дополнительной информацией выше – AshDDN
еще вопросы: XSD \t ' ' также генерирует имена столбцов с подчеркиванием (_), как ниже '@Basic @Column (name =" NAME_ ", length = 255) public String getName() { имя возврата; } ' –
AshDDN