4 Replies Latest reply on Aug 10, 2007 9:53 AM by grdzeli_kaci

    Joined Inheritance Strategy Problem

      hi all,

      Enviroment:
      JBoss - 4.0.4GA
      DB - Oracle 10g
      EJB - JBoss EJB 3.0 RC7 - FD

      i have 3 table into database
      Root Table : PAYMENT_METHOD_DATA
      first Child Table : BANK_TRNSF_METHOD_INFO
      second Child Table : SCRATCH_METHOD_INFO

      in java i have inheritance joined strategy, then root class looks like :

      @Entity()
      @Table(name = "PAYMENT_METHOD_DATA", schema = "CCARE")
      @Inheritance(strategy = InheritanceType.JOINED)
      @DiscriminatorColumn(name = "METHOD_DATA_TYPE", discriminatorType = DiscriminatorType.INTEGER)
      @DiscriminatorValue("1")
      public class PaymentMethodData implements Serializable {
      }
      


      then first child looks like :

      @Entity()
      @Table(name = "BANK_TRNSF_METHOD_INFO", schema = "CCARE")
      @DiscriminatorValue("2")
      public class BankTrnsfMethodInfo extends PaymentMethodData implements
      Serializable {
      }
      


      second child :

      @Entity()
      @Table(name = "SCRATCH_METHOD_INFO", schema = "CCARE")
      @DiscriminatorValue("3")
      public class ScratchMethodInfo extends PaymentMethodData implements
      Serializable {
      }
      



      when i persist BankTrnsfMethodInfo entity object,
      automatically persisted also PaymentMethodData, but into PAYMENT_METHOD_DATA column METHOD_DATA_TYPE value is NULL. i don't understand what happened

      I NEED PARRENT-CHILDS STRATEGY, is the JOINED strategy for this task ?

      can anybody help me ? i tried to do this for a month, but i could not resolve.

      is this known bug? or may other new version help me ???

      __________
      Regards,
      Paata.

        • 1. Re: Joined Inheritance Strategy Problem
          waynebaylor

          The InheritanceType.JOINED is a "table per subclass" strategy. So you don't need a discriminator, which is probably why it was null.

          • 2. Re: Joined Inheritance Strategy Problem

             

            "waynebaylor" wrote:
            The InheritanceType.JOINED is a "table per subclass" strategy. So you don't need a discriminator, which is probably why it was null.


            i did what you say, but problem not resolved.

            • 3. Re: Joined Inheritance Strategy Problem

              Hibernate only uses the discrimnator value if it is really needed (single table strategy). Since the class type for the strategy joined is clear by itself the discriminator value will be null. You can use the following hack to work around this:

               /*
               * This is workaround for a hibernate bug:
               * -> http://opensource.atlassian.com/projects/hibernate/browse/ANN-140?page=all
               */
               @Column(name="DISCRIMINATOR",length=31)
               public String getDiscriminatorValue() {
               DiscriminatorValue discriminatorValueAnnotation = this.getClass().getAnnotation(DiscriminatorValue.class);
               if (discriminatorValueAnnotation != null) {
               return discriminatorValueAnnotation.value();
               }
               return this.getClass().getSimpleName();
               }
              
               public void setDiscriminatorValue(String dummy) {
               }
              


              You will have to tweak it to use an integer as the discriminator value.

              Regards

              Felix

              • 4. Re: Joined Inheritance Strategy Problem

                it works, fine,
                thank you very much.