Hibernate is offering a configuration called LazyCollectionOption.EXTRA. Extra lazy collections means we can apply trivial operations to them without having to retrieve them from the database and without having to write these trivial queries to avoid doing so. Trivial operations are considered the size(), isEmpty() and contains(). If for example we have an entity User and an extra lazy collection called Address we can call user.getAddress.size() and this will generate a COUNT query on the ADDRESS table. So, no need to write a special query or load in memory the collection. Lazy loading is set by default to @OneToMany relations but you need to set it on @ManyToOne which are by default Eagerly loaded. @OneToOne can be lazy loaded only if the relation is not optional. If the relation is optional the the proxy will have to query the database to find out if it should be null or if it should be initiated. A spring boot property that needs to be overriden in all our applications because
The pessimistic locking is not really a locking. It is easy to introduce optimistic locking in our code, all we need to do is add the @Version annotation to our entities. Pessimism means that we assume that there will be no conflict and everything will complete normally. But if they don't, then an OptimisticLockException is thrown and a transaction is marked for roll back. An alternative way to activate optimistic locking is annotating an entity with OptimisticLockType.ALL and activate dynamic update. This annotation tells hibernate to check the state of all entity fields before and after persisting it and detect any change. Instead we could use OptimisticLockType.DIRTY and an OptimisticLockException is thrown only if the same field has been changed before persisting by another unit of work. It depends what are the business demands to choose one or the other. Another option is to use OPTIMISTIC_FORCE_INCREASE which means that after a read, we force an increase of the entity versio