Thnx Radu, I've seen the JIRA issue but am currently tied up with other
stuff. Will give it a closer look hopefully soon.


On Wed, Aug 27, 2014 at 2:35 PM, Radu Creanga <rdc...@gmail.com> wrote:

> Hi Thomas,
>
> In case you haven't noticed, I opened
> https://issues.apache.org/jira/browse/DELTASPIKE-699 and submitted a
> patch.
> The patch covers a somewhat larger scope as the issue described here
> affects any method creating QuerySelections. I haven't submitted a ICLA
> yet, as I'm having some trouble with faxing at the moment, but will do that
> soon.
>
> Regards,
> Radu
>
>
> On Tue, Aug 26, 2014 at 12:45 PM, Thomas Hug <thomas....@gmail.com> wrote:
>
> > Hi Radu
> > Yes good catch - makes perfectly sense. Do you mind creating a JIRA
> ticket
> > for that?
> >
> >
> > On Tue, Aug 26, 2014 at 12:15 PM, Radu Creanga <rdc...@gmail.com> wrote:
> >
> > > Hi all,
> > >
> > > Suppose one has an entity class hierarchy, such as when moving auditing
> > > fields into a mapped superclass.
> > >
> > > @MappedSuperclass
> > > @EntityListeners(AuditEntityListener.class)
> > > public abstract class Auditable implements Serializable {
> > >
> > >   @CreatedOn
> > >   @Temporal(TemporalType.TIMESTAMP)
> > >   private Date created;
> > >
> > >   @ModifiedOn
> > >   @Temporal(TemporalType.TIMESTAMP)
> > >   private Date modified;
> > >
> > >   // getters, setters
> > >
> > > }
> > >
> > > @Entity
> > > public class Item extends Auditable {
> > >
> > >   @Id
> > >   private Long id;
> > >   @Basic
> > >   private String name;
> > >
> > >   // getters, setters
> > >
> > > }
> > >
> > > Then an metamodel processor would generate the following metamodel
> > classes:
> > >
> > > @StaticMetamodel(Auditable.class)
> > > public abstract class Auditable_ {
> > >
> > > public static volatile SingularAttribute<Auditable, Date> created;
> > >  public static volatile SingularAttribute<Auditable, Date> modified;
> > >
> > > }
> > >
> > > @StaticMetamodel(Item.class)
> > > public abstract class Item_ extends
> > > com.mobilabsolutions.nappkin.web.dto.Auditable_ {
> > >
> > > public static volatile SingularAttribute<Item, Long> id;
> > >         public static volatile SingularAttribute<Item, String> name;
> > >
> > > }
> > >
> > > For the sake of completeness, here's the repository declaration with
> > > criteria support:
> > >
> > > @Repository
> > > public interface ItemRepository extends EntityRepository<Item, Long>,
> > >     CriteriaSupport<Item> {
> > >
> > > }
> > >
> > > Then, if one wants to do the following:
> > >
> > > @Inject
> > > private ItemRepository itemRepository;
> > >
> > > public void someMethod() {
> > >   this.itemRepository.criteria().select(
> > >         this.itemRepository.attribute(Item_.name),
> > >         *this.itemRepository.attribute(Item_.modified)*);
> > > }
> > >
> > > the source won't compile, because the declaration of the attribute()
> > method
> > > in CriteriaSupport:
> > >
> > > public interface CriteriaSupport<E>
> > > {
> > >     ...
> > >
> > >     /**
> > >      * Create a query selection for an Entity attribute.
> > >      * @param attribute Attribute to show up in the result selection
> > >      * @return          {@link QuerySelection} part of a {@link
> > > Criteria#select(Class, QuerySelection...)} call.
> > >      */
> > >     <X> QuerySelection<E, X> attribute(SingularAttribute<E, X>
> > attribute);
> > >
> > >     ...
> > >
> > > }
> > >
> > > Wouldn't it make sense (and possible?) to change it to:
> > >
> > > <X> QuerySelection<E, X> attribute(SingularAttribute<? super E, X>
> > > attribute);
> > >
> > > The mapped superclass doesn't have to have anything to do with
> auditing,
> > > but that's the example that came to mind.
> > >
> > > Best regards,
> > > Radu
> > >
> >
>

Reply via email to