Могу ли я настроить Hibernate / JPA для обновления записи объекта, когда были изменены только поля без отметок времени? - PullRequest
2 голосов
/ 10 января 2012

На данный момент у меня есть класс сущностей Hibernate следующим образом:

@Entity
@Table(name = "entity")
public class Entity implements Serializable {

    private static final long serialVersionUID = 2040757598327793105L;

    @Id
    @Column
    private int id;

    @Column
    private String data;    

    @Column(name = "last_modified")
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModified;
}

Я обнаружил, что даже когда поля без меток времени не изменяются (то есть поле data), вызовmerge все еще обновляет отметку времени.Я бы хотел, чтобы отметка времени обновлялась только тогда, когда изменились другие поля данных.

Можно ли в любом случае запретить вызовы merge для создания SQL UPDATE, когда все остальные поля данных не изменены, или я могуВы должны явно проверить это самостоятельно в коде?

1 Ответ

3 голосов
/ 11 января 2012

Обновление (благодаря комментарию):

Начиная с версии 4 Hibernate @Entity устарела, и для разрешения динамических обновлений следует использовать @DynamicUpdate(true) (в сочетании с @SelectBeforeUpdate(true))


Если вы хотите запретить включение неизмененных полей в запросы UPDATE, добавьте это в свою сущность:

@org.hibernate.annotations.Entity(dynamicUpdate=true) // update only changed fields
public class ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...