I’m a great user of the Java Persistence API (JPA). It just simplifies the code a lot when interacting with databases. Even with the simplification, the code keeps its readability because the API is object-oriented, very close to our mental abstraction. However, it is still very criticized because of pending features like Criteria, a better default implementation (Toplink sucks!) and a consistent implementation considering Generics. Actually, the last one is the reason of this post, which describes an insignificant but annoying experience with unchecked conversion caused by a weak support of Generics.
The code below shows a business method in a stateless session beans that returns a list of Transcription’s instances created by the JPA with data retrieved from the database.
When we implement this method using Netbeans, no warning message appears automatically. It might not occur because the editor doesn’t understand the word
Transcription in the query as an entity class. However, the warning message below appears if we put the additional parameter
-Xlint:unchecked, which tells the compiler to give more detail for unchecked conversion warnings.
<...>/AnnotationServiceBean.java:70: warning: [unchecked] unchecked conversion found : java.util.List required: java.util.List<...entity.Transcription> .getResultList(); 1 warning
According to this document, created by Sean Brydon at Sun Microsystems, the warning is generated because
query.getResultList() returns a non-generic version of List, when the return type expects
List<transcription>. To stop the warning, we are obliged to add the annotation
@SuppressWarnings(“unchecked”) just before the method declaration as shown below.
The same document mentions that in a future version of the Java Persistence API, the
javax.persistence.Query class will likely change to better support generics. This post is to stimulate them to do it faster, because for me
@SuppressWarnings(“unchecked”) is actually a dirt in my beautiful and legible source code.