[jboss-user] [JBoss Seam] - Re: Class Inheritance and the EntityHome Framework Class

trickyvail do-not-reply at jboss.com
Wed Jul 11 10:58:10 EDT 2007


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



More information about the jboss-user mailing list