You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "Gerhard Petracek (JIRA)" <ji...@apache.org> on 2014/09/21 18:23:33 UTC

[jira] [Updated] (DELTASPIKE-699) Signature relaxing of attribute method() in CriteriaSupport

     [ https://issues.apache.org/jira/browse/DELTASPIKE-699?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gerhard Petracek updated DELTASPIKE-699:
----------------------------------------
    Fix Version/s: 1.0.3

> Signature relaxing of attribute method() in CriteriaSupport
> -----------------------------------------------------------
>
>                 Key: DELTASPIKE-699
>                 URL: https://issues.apache.org/jira/browse/DELTASPIKE-699
>             Project: DeltaSpike
>          Issue Type: Improvement
>          Components: Data-Module
>    Affects Versions: 1.0.0
>            Reporter: Radu Creanga
>            Assignee: Thomas Hug
>             Fix For: 1.0.3
>
>         Attachments: DELTASPIKE-699.patch
>
>
> 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);
>     ...
> }
> Should change the method signature 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.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)