You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "Radu Creanga (JIRA)" <ji...@apache.org> on 2014/08/26 12:57:57 UTC
[jira] [Created] (DELTASPIKE-699) Signature relaxing of attribute
method() in CriteriaSupport
Radu Creanga created DELTASPIKE-699:
---------------------------------------
Summary: 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
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.2#6252)