I am using JPA2.0 with Hibernate.
For example I have JPA entity for below table:
User [userId, userName, userAddress]
I can fetch user entity using find() method:
User user = entityManager.find(User.class , 1L); // 1L is user id
Now, If I change any user's state (let say userName) on same user entity I fetched above:
user.setUserName("Narendra");
And perform merge using merge() method:
entityManager.merge(user);
Merge is performed successfully with below query which is fired by JPA/hibernate while merging:
Hibernate: update User set USERID =?, USERNAME=?, USERADDRESS=? where USERID=?
Here my question is, If I changed only user name state in User entity, I did not change the userId, userAddress etc. JPA should fire below query (just to change userName) rather above query.
Hibernate: update User set USERNAME=? where USERID=?
Any idea on it?
Look into the dynamic-update
property.
dynamic-update (optional - defaults to false): specifies that UPDATE SQL should be generated at runtime and can contain only those columns whose values have changed.
Take into account that dynamic updates can have some impact on performance. There's a little overhead involved in using it, and it might be counterproductive if you don't have a large (maybe legacy) table with lots of columns that are unlikely to be modified. See this related question Hibernate : dynamic-update dynamic-insert - Performance Effects.
If you're using Hibernate Annotations, use the Hibernate specific @Entity
annotation along with the JPA one:
@org.hibernate.annotations.Entity(dynamicUpdate = true)
If you're using XML mappings:
<class name="User" table="user" dynamic-update="true">
The Hibernate-specific @Entity annotation has been deprecated in Hibernate 4.0, and is scheduled to disappear in 4.1. The proper way to use dynamic updates is to annotate the entity with @DynamicUpdate now (thanks @Tiny for the heads up).
Also can be used as annotation:
import org.hibernate.annotations.DynamicUpdate;
@Entity
@DynamicUpdate
@Table(name = "payments")
public class Payment {
...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With