Hibernate persist entity without fetching association object. just by id

Hibernate users can implement this method:

public <T extends Object> T getReferenceObject(Class<T> clazz, Serializable id) {
        return getCurrentSession().get(clazz, id);
    }

And call like:

MyEntity myEntity = getRefererenceObject(MyEntity.class, 1);

You can change id type to Integer or Long as per your entity model. Or T can be inherited from your BaseEntity if you have one base class for all entities.


If someone is using spring JPA, The same in Spring JPA can be done using the method

getOne(userId)


"Can I persist car record without fetching user?"

Yes, that's one of the good sides of Hibernate proxies:

User user = entityManager.getReference(User.class, userId); // session.load() for native Session API  
Car car = new Car();
car.setUser(user);

The key point here is to use EntityManager.getReference:

Get an instance, whose state may be lazily fetched.

Hibernate will just create the proxy based on the provided id, without fetching the entity from the database.

"If I use session.createSQLQuery("insert into .....values()") will the Hibernate's batch insert work fine?"

No, it will not. Queries are executed immediately.

Tags:

Java

Hibernate