NaturalId, Hibernate always hit the DB

You can’t lazy load associations mapped through non-primary keys. Hibernate proxies require the primary key. This is why you are seeing this immediate loading. Hibernate 5 behaves the same way.

If you really want lazy loading, you will have to use bytecode enhancement. An alternative is to use a DTO approach with e.g. Blaze-Persistence Entity-Views where you simply don’t have that association in your model and thus also don’t need to care about lazy loading.