You are right about the problem though. While callbacks invocations are polymorphic (i.e. a concrete subclass' implementation will be invoked in runtime), callbacks "compilation" requires a method to be defined on a class that declares a callback. I guess this is (a) a bug and (b) a victim of us closely following the JPA spec that does not have a concept of a generation gap pattern.

Andrus


On Mar 30, 2010, at 9:57 PM, Andrus Adamchik wrote:

Not sure about the callback part, but using enum as a discriminator is not yet supported:

http://issues.apache.org/jira/browse/CAY-1213

Andrus

On Mar 30, 2010, at 6:52 PM, Michael Gentry wrote:

OK, this is kind of a followup on the generated abstract class...

I'm attempting to test using inheritance with an enum as the
discriminator column and a callback.  For my classes:

Product (Abstract) with Book and Game inheriting from Product.

Product contains an enum (ProductType) to discriminate between the two.

Product's post-add callback I set to "initializeProductType" and
Cayenne generated this in _Product.java:

  protected abstract void initializeProductType();

I had to go into Product.java and change that class to be abstract (I
don't want any instances of it created).  I implemented
initializeProductType() in Book.java and Game.java (my only subclasses
thus far).  At runtime, I get this exception:

Exception in thread "main" java.lang.IllegalArgumentException: Class
mrg.model.Product has no valid callback method 'initializeProductType'

Of course, this exception message is entirely true: Product does not
contain initializeProductType() because it is in the subclasses.

Thoughts on if this is legitimate?

Thanks,

mrg

PS. The callback method implementation is: @Override protected void
initializeProductType() { setProductType(ProductType.BOOK); } (for
Book, of course).




Reply via email to