It turned out to be pretty simple to get it working.

@Entity
  | @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  | @DiscriminatorColumn(name = "discriminator", discriminatorType = 
DiscriminatorType.STRING)
  | public abstract class BaseClass implements Serializable
  | {
  |     private String discriminator;
  | 
  |     @Column(name = "discriminator", length = 16, insertable = false, 
updatable = false)
  |     @Length(max = 16)
  |     public String getDiscriminator()
  |     {
  |             return discriminator;
  |     }
  | 
  |     public void setDiscriminator(String discriminator)
  |     {
  |             this.discriminator = discriminator;
  |     }
  | }
@Entity
  | @DiscriminatorValue("SubClassOne")
  | public class SubClassOne extends BaseClass
  | {
  |     public SubClassOne()
  |     {
  |             discriminator = "SubClassOne";
  |     }
  | }
@Entity
  | @DiscriminatorValue("SubClassTwo")
  | public class SubClassTwo extends BaseClass
  | {
  |     public SubClassTwo()
  |     {
  |             discriminator = "SubClassTwo";
  |     }
  | }

@Name("ClassHome")
  | public class ClassHome extends EntityHome<BaseClass>
  | {
  |     // set a default subclass to instantiate
  |     private String discriminator = "SubClassOne";
  |     
  |     @Override
  |     protected BaseClass createInstance()
  |     {
  |             BaseClass baseClass;
  |             if("SubClassOne".equals(discriminator))
  |             {
  |                     baseClass = new SubClassOne();
  |             }
  |             else if("SubClassTwo".equals(discriminator))
  |             {
  |                     baseClass = new SubClassTwo();
  |             }
  |             else // unknown class
  |             {
  |                     // throw exception
  |             }
  |             return baseClass;
  |     }
  | 
  |     public String getDiscriminator()
  |     {
  |             return discriminator;
  |     }
  |     
  |     public void setDiscriminator(String discriminator)
  |     {
  |             this.discriminator = discriminator;
  |     }
  | }

When I want to create a new SubClass I set a JSF control to call 
setDiscriminator in the BaseClassHome object which it uses in turn to determine 
the type of subclass to instantiate.

I'd appreciate any comments or advice if this seems like a misuse of the seam 
framework. Thanks.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4063034#4063034

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4063034
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to