Вот реализация как, как предложено @Omar Kooheji:
public static <T> T as(Class<T> clazz, Object o){
if(clazz.isInstance(o)){
return clazz.cast(o);
}
return null;
}
as(A.class, new Object()) --> null
as(B.class, new B()) --> B
Нет никакой разницы; они синонимы.
В документации по этому поводу довольно тихо, но если вы посмотрите на источник AnnotationBinder.getCascadeStrategy ()
, оба они переводятся в каскадный тип «удаления» Hibernate.
Причина, по которой оба существуют (и я предполагаю здесь), потому что ядро Hibernate всегда использовало «DELETE» как каскадный тип, но JPA CascadeType указывает «REMOVE» как константу. CascadeType аннотаций Hibernate, являющийся частью расширения JPA Hibernate, таким образом, имеет как полноту, так и согласованность.