Very cool. I didn't think to use hasmember. Thanks! On Tue, Aug 4, 2009 at 4:27 PM, Ramnivas Laddad<[email protected]> wrote: > Take a look at -Xhasmember option to ajc. You should be able to do something > along the following lines: > interface NeedsPrePersist { > } > declare parents: !hasfield(@PrePersist * *) && (@Entity *) extends > NeedPrePersist; > Then introduce fields and methods to only types that implement > NeedPrePersist. > -Ramnivas > On Tue, Aug 4, 2009 at 3:32 PM, Matthew Adams <[email protected]> > wrote: >> >> Hi all, >> >> I was wondering how it might be possible to achieve what I'm calling a >> conditional inter-type declaration. >> >> Here's a simple auditing example. For a JPA entity, I want to >> introduce a @PrePersist method if and only if the target class doesn't >> have one because it's an error to have multiple @PrePersist methods on >> an entity. If it already has a @PrePersist method, I want to execute >> advice after the target instance's @PrePersist method is invoked by >> the JPA implementation. Same for @PreUpdate. >> >> The example below will work for Person, but not for Document -- >> Document will end up with two @PrePersist methods. How can I refactor >> this to work for both? >> >> ======== >> @Entity >> public class Document { >> // ... >> �...@prepersist >> private void prePersist() { /* ... */ } >> } >> ======== >> @Entity >> public class Person { >> // ... >> } >> ======== >> // works only for an @Entity that DOES NOT define a @PrePersist or a >> @PreUpdate method >> public aspect AuditingItd { >> private interface Auditable { >> } >> >> declare parents: (@javax.persistence.Entity *) implements >> Auditable; >> >> �...@column(name = "updated") >> private Date Auditable.updated; >> >> �...@prepersist >> private void Auditable.auditablePrePersist() { >> updated = new Date(); >> } >> >> �...@preupdate >> private void Auditable.auditablePreUpdate() { >> updated = new Date(); >> } >> } >> ========= >> >> -matthew >> >> -- >> mailto:[email protected] >> skype:matthewadams12 >> yahoo:matthewadams >> aol:matthewadams12 >> google-talk:[email protected] >> msn:[email protected] >> http://matthewadams.me >> http://www.linkedin.com/in/matthewadams >> _______________________________________________ >> aspectj-users mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users > >
-- mailto:[email protected] skype:matthewadams12 yahoo:matthewadams aol:matthewadams12 google-talk:[email protected] msn:[email protected] http://matthewadams.me http://www.linkedin.com/in/matthewadams _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
