When the compilers compiles to byte code a process called Erasure happens. This remove the type information from the collections. I believe it will manually do the casts etc as part of the process of generating the byte code. If you remove the generic parts of your class (ie the <..> ) then you will see you have two saveAll methods. The error is that you have two save all methods will the same signature. The collections have type object in the byte code.
Try removing the <..> which might make it clearer. When you put the <...> back in then consider the name of the methods. If they are different it should compile.
Also I dont think this is a hibernate problem so this tag should be removed. It is a java generic problem you have.
What you could do here is type the class
public class Bar extends Foo<MyClass>
and then have the method types to T
public void saveAll(Collection<MyClass> stuff) {
super.saveAll(stuff);
}
and then the declaration of Foo would be something like
public abstract class Bar extends Foo<T> {
public void saveAll(Collection<T> stuff) {
}