I find the behavior is inconsistent in Hibernate 5.0.2. Sometimes it returns BigInteger and sometimes it returns Long. I don't know yet which criteria triggers either behavior.