Menu

Problem with schemaUpdate

2007-07-10
2012-11-26
  • jamesIxzdore

    jamesIxzdore - 2007-07-10

    What am i doing wrong here. I created my components and now trying to create the tables using schemaUpdate I get this error

    Buildfile: /home/james.agada/openxava-2.2/workspace/Ticketer/build.xml
    updateSchema:
    updateSchema:
    [schemaupdate] Running Hibernate Core SchemaUpdate.
    [schemaupdate] This is an Ant task supporting only mapping files, if you want to use annotations see http://tools.hibernate.org.
    [schemaupdate] 10-Jul-2007 11:20:40 org.hibernate.cfg.Environment <clinit>
    [schemaupdate] INFO: Hibernate 3.2.4.sp1
    [schemaupdate] 10-Jul-2007 11:20:40 org.hibernate.cfg.Environment <clinit>
    [schemaupdate] INFO: hibernate.properties not found
    [schemaupdate] 10-Jul-2007 11:20:40 org.hibernate.cfg.Environment buildBytecodeProvider
    [schemaupdate] INFO: Bytecode provider name : cglib
    [schemaupdate] 10-Jul-2007 11:20:40 org.hibernate.cfg.Environment <clinit>
    [schemaupdate] INFO: using JDK 1.4 java.sql.Timestamp handling
    [schemaupdate] 10-Jul-2007 11:20:40 org.hibernate.cfg.Configuration configure
    [schemaupdate] INFO: configuring from file: hibernate-junit.cfg.xml
    [schemaupdate] 10-Jul-2007 11:20:41 org.hibernate.cfg.Configuration doConfigure
    [schemaupdate] INFO: Configured SessionFactory: null
    [schemaupdate] 10-Jul-2007 11:20:41 org.hibernate.cfg.Configuration addFile
    [schemaupdate] INFO: Reading mappings from file: /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files/Pos.hbm.xml
    [schemaupdate] 10-Jul-2007 11:20:41 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
    [schemaupdate] INFO: Mapping class: org.openxava.ticketer.model.Pos -> TICKETER_POS

    BUILD FAILED
    /home/james.agada/openxava-2.2/workspace/Ticketer/build.xml:71: The following error occurred while executing this line:
    /home/james.agada/openxava-2.2/workspace/OpenXava/build.xml:856: Schema text failed: Could not parse mapping document from file /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files/Pos.hbm.xml

    Total time: 2 seconds

    I have checked and Pos.hbm.xml is there.

     
    • Javier Paniza

      Javier Paniza - 2007-07-10

      Hi James,

      > ... Could not parse mapping document ...

      surely your Pos.hbm.xml is not correct.
      Execute the ant target 'regenerateCode' and see at the output.
      Do you have any error message ?

      Cheers
      Javi

       
    • jamesIxzdore

      jamesIxzdore - 2007-07-10

      Thanks Javier.
      I think there is a problem but not in Pos.hbm.xml. I am getting this errors when I regenerate code.

      Buildfile: /home/james.agada/openxava-2.2/workspace/Ticketer/build.xml
      regenerateCode:
      regenerateHibernate:
         [delete] Deleting: /home/james.agada/openxava-2.2/workspace/Ticketer/gen-src-xava/dnas-pojo.properties
      copyDTDs:
           [copy] Copying 18 files to /home/james.agada/openxava-2.2/workspace/Ticketer/xava/dtds
           [copy] Copying 2 files to /home/james.agada/openxava-2.2/workspace/Ticketer/components/dtds
      filterXavaFiles:
      filterXavaFilesWithConfiguration:
           [copy] Copying 19 files to /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files
           [copy] Copying 10 files to /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files
      filterXavaFilesWithoutConfiguration:
      generateHibernate:
           [echo] Generating POJOs/Hibernate
           [java] Generating POJO code for User
           [java] Generating javabean code for aggregate Address
           [java] Generanting hibernate mapping for User
           [java] Generating POJO code for Provider
           [java] Generating javabean code for aggregate Address
           [java] Generanting hibernate mapping for Provider
           [java] Generating POJO code for ProviderPos
           [java] Generanting hibernate mapping for ProviderPos
           [java] Generating POJO code for Ticket
           [java] Generanting hibernate mapping for Ticket
           [java] Exception: name property not found in null reference mapping of ticketClass
           [java] org.openxava.util.ElementNotFoundException: name property not found in null reference mapping of ticketClass
           [java]     at org.openxava.mapping.ReferenceMapping.getColumnForReferencedModelProperty(ReferenceMapping.java:46)
           [java]     at org.openxava.mapping.ReferenceMapping.getColumns(ReferenceMapping.java:109)
           [java]     at HibernatePG.generate(Unknown Source)
           [java]     at HibernatePG.main(Unknown Source)
           [java]     at HCodeGenerator.generate(Unknown Source)
           [java]     at CodeGenerator.generate(Unknown Source)
           [java]     at CodeGenerator.generate(Unknown Source)
           [java]     at CodeGenerator.run(Unknown Source)
           [java]     at HCodeGenerator.main(Unknown Source)
           [java] Generating POJO code for TicketHistory
           [java] Generanting hibernate mapping for TicketHistory
           [java] Generating POJO code for Service
           [java] Generanting hibernate mapping for Service
           [java] 10-Jul-2007 17:08:43 org.openxava.mapping.ModelMapping loadDatabaseMetadata
           [java] WARNING: Problems loading database metadata. Default values are assumed
           [java] 10-Jul-2007 17:08:43 org.openxava.mapping.ModelMapping loadDatabaseMetadata
           [java] WARNING: Problems loading database metadata. Default values are assumed
           [java] 10-Jul-2007 17:08:43 org.openxava.mapping.ModelMapping loadDatabaseMetadata
           [java] WARNING: Problems loading database metadata. Default values are assumed
           [java] Generating POJO code for ServiceTicketClass
           [java] Generanting hibernate mapping for ServiceTicketClass
           [java] Exception: name property not found in TicketClass reference mapping of ticketClass
           [java] org.openxava.util.ElementNotFoundException: name property not found in TicketClass reference mapping of ticketClass
           [java]     at org.openxava.mapping.ReferenceMapping.getColumnForReferencedModelProperty(ReferenceMapping.java:46)
           [java]     at org.openxava.mapping.ReferenceMapping.getColumns(ReferenceMapping.java:109)
           [java]     at HibernatePG.generate(Unknown Source)
           [java]     at HibernatePG.main(Unknown Source)
           [java]     at HCodeGenerator.generate(Unknown Source)
           [java]     at CodeGenerator.generate(Unknown Source)
           [java]     at CodeGenerator.generate(Unknown Source)
           [java]     at CodeGenerator.run(Unknown Source)
           [java]     at HCodeGenerator.main(Unknown Source)
           [java] Generating POJO code for ServicePos
           [java] Generanting hibernate mapping for ServicePos
           [java] Generating POJO code for ServiceComment
           [java] Generanting hibernate mapping for ServiceComment
           [java] Generating POJO code for ServiceType
           [java] Generanting hibernate mapping for ServiceType
           [java] Generating POJO code for ServiceTypeParameter
           [java] Generanting hibernate mapping for ServiceTypeParameter
           [java] Generating POJO code for Pos
           [java] Generanting hibernate mapping for Pos
           [java] Generating POJO code for PosUser
           [java] Generanting hibernate mapping for PosUser
           [java] Generating POJO code for ServiceParameter
           [java] Generanting hibernate mapping for ServiceParameter
           [java] Generating POJO code for TicketClass
           [java] Generanting hibernate mapping for TicketClass
      copyDTDs:
           [copy] Copying 18 files to /home/james.agada/openxava-2.2/workspace/Ticketer/xava/dtds
           [copy] Copying 2 files to /home/james.agada/openxava-2.2/workspace/Ticketer/components/dtds
      filterHibernateFiles:
      filterHibernateFilesWithConfiguration:
           [copy] Copying 26 files to /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files
      filterHibernateFilesWithoutConfiguration:
      BUILD SUCCESSFUL
      Total time: 1 second
      here is the component file for Ticket and TicketClass
      <?xml version="1.0" encoding="ISO-8859-1"?>

      <!DOCTYPE component SYSTEM "dtds/component.dtd">

      <component name="Ticket">

          <entity>
              <property name="ticketId" key="true" hidden="true" type="String">
                  <default-value-calculator class="org.openxava.calculators.UUIDCalculator" on-create="true"/>
              </property>   
              <property name="status" >
                  <valid-values>
                      <valid-value value="SOLD"/>
                      <valid-value value="NEW"/>
                      <valid-value value="CANCELLED"/>
                      <valid-value value="USED"/>
                  </valid-values>
              </property>
              <collection name="History">
                  <reference model="TicketHistory" name="ticketHistory"/>
                  <order>${doneOn}</order>
              </collection>
              <reference model="TicketClass" name="ticketClass" />
              <reference model="Service" />
          </entity>
          <aggregate name="TicketHistory">
              <property name="activity">
                  <valid-values>
                      <valid-value value="CREATE"/>
                      <valid-value value="SALE"/>
                      <valid-value value="CANCEL"/>
                      <valid-value value="USE"/>
                     
                  </valid-values>
              </property>
              <reference model="Pos" key="true"/>
              <reference model="User" key="true"/>
              <property name="doneFor" stereotype="TEXT_AREA"/>
              <property name="doneOn" stereotype="DATETIME" key="true"/>   
          </aggregate>
           
               

          <entity-mapping table="TICKETER@separator@TICKET">
              <property-mapping property="ticketId" column="TICKETID"/>
              <property-mapping property="status" column="STATUS"/>
              <reference-mapping reference="ticketClass">
                  <reference-mapping-detail column="TICKETCLASS" referenced-model-property="ticketClassId"/>   
              </reference-mapping>
              <reference-mapping reference="service">
                  <reference-mapping-detail column="SERVICE" referenced-model-property="serviceId"/>
              </reference-mapping>
          </entity-mapping>
          <aggregate-mapping aggregate="TicketHistory" table="TICKETHISTORY">
              <property-mapping column="ACTIVITY" property="activity"/>
              <property-mapping column="DONEFOR" property="doneFor"/>
              <property-mapping column="DONEON" property="doneOn"/>
              <reference-mapping reference="pos">
                  <reference-mapping-detail column="DONEBY" referenced-model-property="number">               
                  </reference-mapping-detail>
              </reference-mapping>
              <reference-mapping reference="user">
                  <reference-mapping-detail column="USER" referenced-model-property="userid"/>
              </reference-mapping>
              <reference-mapping reference="ticket">
                  <reference-mapping-detail column="TICKET" referenced-model-property="ticketId"/>
              </reference-mapping>
          </aggregate-mapping>               
      </component>
      <?xml  version="1.0" encoding="ISO-8859-1"?>

      <!DOCTYPE component SYSTEM "dtds/component.dtd">

      <component name="TicketClass">

          <entity>           
              <property name="ticketClassId" key="true" hidden="true" type="String">
                      <default-value-calculator class="org.openxava.calculators.UUIDCalculator" on-create="true"/>
              </property>   
              <!--
              <collection name="Tickets">
                  <reference model="TicketInClass" />
              </collection>
              -->
             
              <property name="name" type="String"
                   size="15" required="true" key="true"/>
              <property name="value" stereotype="MONEY" />
              <property name="maximumQuantity" type="long" />
              <property name="quantityDiscount" type="java.math.BigDecimal" />
              <property name="minimumDiscountQuantity" type="long"/>
              <property name="redeemable" type="Boolean" />
              <property name="transferable" type="Boolean"/>
              <property name="price" stereotype="MONEY" />
              <property name="validityInDays" type="short" />
              <property name="expiryDate" stereotype="DATETIME" />
              <property name="message" stereotype="MEMO" />
              <reference model="Service" key="true"/>
          </entity>
          <!-- <aggregate name="ticketInClass">
              <property name="ticketInClassId" key="true" hidden="true" type="String">
                      <default-value-calculator class="org.openxava.calculators.UUIDCalculator" on-create="true"/>
              </property>   
              <reference model="Ticket"/>   
          </aggregate>
          -->                   
          <entity-mapping table="TICKETER@separator@TICKETCLASS">
              <property-mapping property="name" column="NAME"/>
              <property-mapping column="TICKETCLASSID" property="ticketClassId">
                 
              </property-mapping>
              <property-mapping property="value" column="VALUE"/>
              <property-mapping column="MESSAGE" property="message"/>
              <property-mapping column="EXPIRYDATE" property="expiryDate"/>
              <property-mapping column="VALIDITYINDAYS" property="validityInDays"/>
              <property-mapping column="PRICE" property="price"/>
              <property-mapping column="TRANSFERABLE" property="transferable"/>
              <property-mapping column="REDEEMABLE" property="redeemable"/>
              <property-mapping column="MIN_DISC_QTY" property="minimumDiscountQuantity"/>
              <property-mapping column="QTY_DISCOUNT" property="quantityDiscount"/>
              <property-mapping column="MAX_QTY" property="maximumQuantity"/>
              <reference-mapping reference="service">
                  <reference-mapping-detail column="SERVICE" referenced-model-property="serviceId"/>
              </reference-mapping>
          </entity-mapping>
          <!--
              <aggregate-mapping aggregate="ticketInClass" table="TICKETINCLASS">
              <property-mapping column="TICKETINCLASS" property="ticketInClassId"/>
              <reference-mapping reference="ticket">
                  <reference-mapping-detail column="TICKETID" referenced-model-property="ticketId"/>
              </reference-mapping>
              <reference-mapping reference="ticketClass">
                  <reference-mapping-detail column="TICKETCLASS" referenced-model-property="ticketClassId"/>
              </reference-mapping>
          </aggregate-mapping>
          -->               
      </component>

      Sorry for the long attachement but I just can figure out what the problem is.

       
      • Javier Paniza

        Javier Paniza - 2007-07-11

        Hi James,

        the problem is in TicketClass.
        Change this line

        <property name="name" type="String"
        size="15" required="true" key="true"/>

        by this one

        <property name="name" type="String"
        size="15" required="true"/>

        'name' is not key, or if it's key then you need to map it in reference mapping of Ticket.

        Moreover, it's better to write:

        <collection name="histories">

        that

        <collection name="History">

        Use lowercase to start member names (properties, collections and referencies) because
        a Java field is generated for each.

        Cheers
        Javi

         
    • jamesIxzdore

      jamesIxzdore - 2007-07-11

      Thnx Javier

       
    • jamesIxzdore

      jamesIxzdore - 2007-07-11

      I think I have fixed the problems with the components but I still get errors:
      Buildfile: /home/james.agada/openxava-2.2/workspace/Ticketer/build.xml
      regenerateCode:
      regenerateHibernate:
         [delete] Deleting: /home/james.agada/openxava-2.2/workspace/Ticketer/gen-src-xava/dnas-pojo.properties
      copyDTDs:
           [copy] Copying 18 files to /home/james.agada/openxava-2.2/workspace/Ticketer/xava/dtds
           [copy] Copying 2 files to /home/james.agada/openxava-2.2/workspace/Ticketer/components/dtds
      filterXavaFiles:
      filterXavaFilesWithConfiguration:
           [copy] Copying 19 files to /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files
           [copy] Copying 10 files to /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files
      filterXavaFilesWithoutConfiguration:
      generateHibernate:
           [echo] Generating POJOs/Hibernate
           [java] Generating POJO code for User
           [java] Generating javabean code for aggregate Address
           [java] Generanting hibernate mapping for User
           [java] Generating POJO code for Provider
           [java] Generating javabean code for aggregate Address
           [java] Generanting hibernate mapping for Provider
           [java] Generating POJO code for ProviderPos
           [java] Generanting hibernate mapping for ProviderPos
           [java] Generating POJO code for Ticket
           [java] Generanting hibernate mapping for Ticket
           [java] Generating POJO code for TicketHistory
           [java] Generanting hibernate mapping for TicketHistory
           [java] Generating POJO code for Service
           [java] Generanting hibernate mapping for Service
           [java] Generating POJO code for ServiceTicketClass
           [java] Generanting hibernate mapping for ServiceTicketClass
           [java] Generating POJO code for ServicePos
           [java] Generanting hibernate mapping for ServicePos
           [java] Generating POJO code for ServiceComment
           [java] Generanting hibernate mapping for ServiceComment
           [java] Generating POJO code for ServiceType
           [java] Generanting hibernate mapping for ServiceType
           [java] Generating POJO code for ServiceTypeParameter
           [java] Generanting hibernate mapping for ServiceTypeParameter
           [java] Generating POJO code for Pos
           [java] Generanting hibernate mapping for Pos
           [java] Generating POJO code for PosUser
           [java] Generanting hibernate mapping for PosUser
           [java] Generating POJO code for ServiceParameter
           [java] Generanting hibernate mapping for ServiceParameter
           [java] Generating POJO code for TicketClass
           [java] Generanting hibernate mapping for TicketClass
           [java] Generating POJO code for TicketInClass
           [java] Generanting hibernate mapping for TicketInClass
      copyDTDs:
           [copy] Copying 18 files to /home/james.agada/openxava-2.2/workspace/Ticketer/xava/dtds
           [copy] Copying 2 files to /home/james.agada/openxava-2.2/workspace/Ticketer/components/dtds
      filterHibernateFiles:
      filterHibernateFilesWithConfiguration:
           [copy] Copying 29 files to /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files
      filterHibernateFilesWithoutConfiguration:
      updateSchema:
      updateSchema:
      [schemaupdate] Running Hibernate Core SchemaUpdate.
      [schemaupdate] This is an Ant task supporting only mapping files, if you want to use annotations see http://tools.hibernate.org.
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Environment <clinit>
      [schemaupdate] INFO: Hibernate 3.2.4.sp1
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Environment <clinit>
      [schemaupdate] INFO: hibernate.properties not found
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Environment buildBytecodeProvider
      [schemaupdate] INFO: Bytecode provider name : cglib
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Environment <clinit>
      [schemaupdate] INFO: using JDK 1.4 java.sql.Timestamp handling
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Configuration configure
      [schemaupdate] INFO: configuring from file: hibernate-junit.cfg.xml
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Configuration doConfigure
      [schemaupdate] INFO: Configured SessionFactory: null
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.Configuration addFile
      [schemaupdate] INFO: Reading mappings from file: /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files/Pos.hbm.xml
      [schemaupdate] 11-Jul-2007 18:39:57 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
      [schemaupdate] INFO: Mapping class: org.openxava.ticketer.model.Pos -> TICKETER_POS

      BUILD FAILED
      /home/james.agada/openxava-2.2/workspace/Ticketer/build.xml:71: The following error occurred while executing this line:
      /home/james.agada/openxava-2.2/workspace/OpenXava/build.xml:856: Schema text failed: Could not parse mapping document from file /home/james.agada/openxava-2.2/workspace/Ticketer/filtered-files/Pos.hbm.xml

      Total time: 4 seconds

      Now here is Pos.hbm.xml

      <?xml version="1.0" encoding="ISO-8859-1"?>

      <!-- Generated by OpenXava: Wed Jul 11 18:39:57 GMT-01:00 2007 -->

      <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

      <hibernate-mapping package="org.openxava.ticketer.model">

        <class
            name="Pos"
            table="TICKETER_POS">    
              <id name="number" column="NUMBER" access="field" type='java.lang.String' length='5'>
                  <generator class="assigned"/>
              </id>    
              <property name="longPhoneNumber" access="field" type='java.lang.String' length='16'>
                   <column name="LONGPHONE"  />
              </property>    
              <property name="shortPhoneNumber" access="field" type='java.lang.String' length='12'>
                   <column name="SHORTPHONE"  />
              </property>
              <many-to-one name="defaultUser" column="DEFAULTUSER" class="org.openxava.ticketer.model.User"  access="field"/> 
              <set name="posUsers" order-by="OID" cascade='delete' inverse='true'>
                  <key column="POS"/>
                  <one-to-many class="PosUser"/>
              </set>    
              <property name="name" access="field" column="NAME"/>
        </class>

      </hibernate-mapping>

      So what is amiss? Why can it not pass Pos.hbm.xml?

       
      • Javier Paniza

        Javier Paniza - 2007-07-12

        Hi James,

        > Why can it not pass Pos.hbm.xml?

        The next line of your Pos.hbm.xml is incorrect:

        <property name="name" access="field" column="NAME"/>

        The correct one would be:

        <property name="name" access="field" type='java.lang.String'/>
          <column name="NAME"/>
        </property>

        The problem was that 'type' attribute was missing.
        Obviously this line was not generated by OpenXava, but added by you at hand.

        The better option is use the ant target 'regenerateCode' (not 'generateCode),
        and after it verify the content of the Pos.hbm.xml. The <property/> must be
        as above.

        Cheers
        Javi

         
    • jamesIxzdore

      jamesIxzdore - 2007-07-12

      The Pos.hbm.xml was actually generated by openxava!. May be I did not put the type attribute in the component file. I will check.

       
    • jamesIxzdore

      jamesIxzdore - 2007-07-12

      Found and fixed the problems.

      1. removed all *.hbm.xml in hibernate directory of project
      2. regenerated

      Apparently, regenerate task does not clear the hibernate mapping files in the directory especially when you change the names of the components. Old mapping files got copied to filtered directly even when there are no more matching classes or the classes have changed.

       
      • Javier Paniza

        Javier Paniza - 2007-07-13

        Hi James,

        > regenerate task does not clear the hibernate mapping files in the directory especially when you change the names of the components

        You are right. If you rename a compoment you must delete filtered-file at hand.

        But, there is another option. Edit OpenXava/build.xml and change:

            <target name="regenerateHibernate">
                <delete file="../${project}/gen-src-xava/dnas-pojo.properties"/>
                <antcall target="generateHibernate"/>
            </target>

        by this:

            <target name="regenerateHibernate">
                <delete file="../${project}/gen-src-xava/dnas-pojo.properties"/>
                <delete>
                    <fileset dir="../${project.ejb}/filtered-files" includes="**/*"/>
                </delete>
                <antcall target="generateHibernate"/>
            </target>

        Now, you can rename, and regenerate code without worry about delete filtered-files.

        Moreover, I add this little improvement to OpenXava and it will be available in 2.2.1.

        Cheers
        Javi

         

Log in to post a comment.