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/25 00:10:36 UTC
[jira] [Closed] (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 closed DELTASPIKE-699.
---------------------------------------
> 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)