java - hyperjaxb extra underscore(_) generated in @column for some single character columns -


i trying generate jpa annotated java class using hyperjaxb, have hit 1 problem. suggestion welcome :-

partial ..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> 

here 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> 

here generated java class

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 value of g property.      *       * @return      *     possible object      *     {@link string }      *           */     @basic     @column(name = "g_", length = 255)     public string getg() {         return g;     }      /**      * sets value of g property.      *       * @param value      *     allowed object      *     {@link string }      *           */     public void setg(string value) {         this.g = value;     } } 

the underscore @column(name = "g_", length = 255) breaking code hibernate complains invalid column mapping.

what tried far, had no effect on problem:- 1) inline custom binding in demo.xsd

<xs:annotation>             <xs:appinfo>                 <jxb:property name="g" />             </xs:appinfo>         </xs:annotation> 

and

<xs:annotation>             <xs:appinfo>                 <orm:attribute-override name="g">                     <orm:column name="g" />                 </orm:attribute-override>             </xs:appinfo>         </xs:annotation> 

what missing here, please!

update: hibernate query below:- hibernate:

select demo0_.playerid playerid1_0_, demo0_.g_ g_2_0_ demo demo0_ demo0_.playerid in ( ? )

trace:

caused by: com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception: unknown column 'demo0_.g_' in 'field list'         @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method)         @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:62) 

and rightly actual column g , not g_ generated hyperjaxb, changing g (manually) solves issue

from experience, hyperjaxb add underscore end of column (and suspect table?) name, if name of column reserved word in sql dialect.

e.g. we're using sql server, , our xml source has attribute called value. when gets created column in database, called value_

value isn't reserved word in t-sql (sql server), in pl/sql (oracle). hazard guess name reserved word in sql dialect somewhere!

i've overridden column names in bindings file around :)

hope helps!

edited include examples of bindings cutomization:

here's example rename table, has underscore @ end:

<!-- make table name 'instance' rather 'instance_' -->         <jaxb:bindings node="xs:element[@name='instance']//xs:complextype">             <hj:entity>                 <orm:table name="instance" />             </hj:entity>         </jaxb:bindings> 

here's example renaming column:

<!-- make periodstart , periodend columns have right name (instead of periodenditem -->         <jaxb:bindings node="xs:element[@name='instanceperiod']//xs:complextype//xs:sequence//xs:element[@ref='periodend']">             <hj:basic>                 <orm:column name="periodend" />             </hj:basic>         </jaxb:bindings> 

Comments