[hibernate-dev] Typing Help with JPA 2.1 impl
Steve Ebersole
steve at hibernate.org
Wed Jun 13 15:55:03 EDT 2012
I need some help with generic types in the JPA 2.1 API, specifically
with regard to the new Join#on and Fetch#on methods. We ultimately
unify those 2 interface hierarchies into a single hierarchy in out code
using org.hibernate.ejb.criteria.JoinImplementor which extends from both
Join and Fetch.
The problem I am facing is in the return types. So, Join defines:
public interface Join<Z,X> {
public Join<Z,X> on(...);
...
}
Fetch defines:
public interface Fetch<Z,X> {
public Fetch<Z,X> on(...);
...
}
public interface JoinImplementor<Z,X>
extends Join<Z,X>, Fetch<Z,X>, FromImplementor<Z,X> {
...
}
The compiler does not at all like JoinImplementor as is, so I have to
override the method:
public interface JoinImplementor<Z,X>
extends Join<Z,X>, Fetch<Z,X>, FromImplementor<Z,X> {
public JoinImplementor<Z,X> on(...);
...
}
which should be fine as it is simple return type clarification. And
actually that definition compiles fine.
However, JPA also defines a whole hierarchy from Join such as.
CollectionJoin, ListJoin, etc. So Hibernate has for example:
public interface CollectionJoinImplementor<Z,X> extends
JoinImplementor<Z,X>, CollectionJoin<Z,X> {
@Override
public CollectionJoinImplementor<Z, X> on(...);
...
}
The IDE is fine with this type signature, however trying to compile this
leads to the following error:
types org.hibernate.ejb.criteria.JoinImplementor<Z,X> and
org.hibernate.ejb.criteria.JoinImplementor<Z,X> are incompatible; both
define on(javax.persistence.criteria.Predicate[]), but with unrelated
return types
I have no idea what I need to do here. Can anyone see the solution?
--
steve at hibernate.org
http://hibernate.org
More information about the hibernate-dev
mailing list