So I tried with JDK 1.7 and it worked fine. I am hoping we can get
people to try this on different architecture/jdk combos so we can see
where the issue boundaries are.
I am running on Linux and using the Oracle JDKs:
java version "1.6.0_30"
java version "1.7.0_03"
This does in fact seem to be an issue in the Oracle JDK code. The bug
is 6294779, but it does not seem to be available in the bug database
anymore. According to any reports I could find it was fixed in beta 31
of Java 7 JDK. But apparently no fix was ever ported to Java 6 JDK.
This obviously leads to some interesting question about handling Java
versions in Hibernate builds and how to best handle this situation.
I'd like to define these boundaries first and then have that
discussion. I have attached my working HEAD with the changes in
question (I hope, first time using git archive command). Can others
using alternative JDKs and other OS architectures try compiling this
with their Java 6 JDKs?
Thanks
On Thu 14 Jun 2012 07:20:09 AM CDT, Steve Ebersole wrote:
Ah great point. No I have been compiling with JDK 1.6
On Thu 14 Jun 2012 04:45:27 AM CDT, Hardy Ferentschik wrote:
Hi,
OOI, have you tried with the Java 7 compiler? I think there used to
be a bug in the Java 6 compiler
when it came to covariant return types.
--Hardy
On Jun 13, 2012, at 10:04 PM, Steve Ebersole wrote:
I realize I could split Join and Fetch into different hierarchies.
That is what I want to try to avoid though...
On Wed 13 Jun 2012 02:55:03 PM CDT, Steve Ebersole wrote:
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?
--
st...@hibernate.org
http://hibernate.org
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev
--
st...@hibernate.org
http://hibernate.org
--
st...@hibernate.org
http://hibernate.org
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev