Generally, persistence providers make proxies of objects using some library like CGLIB or javassist. These proxies are creating runtime subclasses of the entities. That's why they should not be final.
Detailed Explanation:
You can make an Hibernate Entity class final, but that's not a good practice. Since Hibernate uses proxy pattern for performance improvement, so, in case of lazy association, by making an entity final, Hibernate will no longer be able to use proxy, because Java doesn't allow extension of final class, thus limiting your performance improvement options. Though, you can avoid this penalty, if your persistent class is an implementation of interface, which declares all public methods defined in Entity class.
Proxies are created dynamically by sub classing the object(For example Student entity class) at runtime. The subclass overrides all the methods of the parent, and when any of the methods are accessed, the proxy loads the real object from the DB and calls the actual method on that object. If we make entity class as final then that entity class can´t be subclassed because final classes can´t be inherited.