is there is any way to switch a session for lazy loading data, I have a multi shards DB env,
the joined data saved on another db instance
If by shard you mean a different database that is connected through a different data source, then no, there is no out of the box way to do this for just lazy loading. If you are using the multi-tenancy configuration, it might be possible to switch the tenant identifier for a session before triggering the lazy loading, but I never tried that: https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html#multitenacy-hibernate