That’s a pic of me with Thor.
I had a situation come up where every time a particular table was updated, an indexed view was also getting updated. That view was intended to speed up a report, but it made the table update really horrible. The view would only get updated if one particular column in the table was being updated. That column never got updated through the application, because once the record was created that column’s input field got grayed out. But Hibernate’s default behavior is to update all columns rather than to check which ones changed and only update the changed columns.
There is a performance trade-off. Usually you probably want the default behavior. But in this case, definitely not.
But Hibernate has an option to allow for updating only the columns that changed. This option is called dynamic-update. Different versions of Hibernate implement it differently. In the example in this blog post, hibernate-annotations version 3.4.0.GA was the dependency brought in.
Because Hibernate’s org.hibernate.annotations.Entity class is not a replacement, but rather a supplementation of javax.persistence.Entity, you have to implement it like this:
import javax.persistence.Entity; . . .
@Entity @org.hibernate.annotations.Entity(dynamicUpdate = true, selectBeforeUpdate = true) @Table(name = "blah") public class Blah...
The selectBeforeUpdate option is not required with the dynamicUpdate. It basically states that before doing an update, do a select to make sure you have the most recent copy of the table, then the dynamicUpdate option says only update changed columns.