Свойство версии Parent не увеличивается, если я обновляю child - PullRequest
0 голосов
/ 24 февраля 2011

Я использую JPA 2 с Hibernate 3.x.У меня есть два объекта Entity Foo и Bar, и отношение выглядит так -

@Entity
public class Foo{
    @Id
    private long id;

    @OneToOne(cascade = CascadeType.ALL )
    @JoinColumn(name = "bar")
    private Bar bar;

    @Version
    private int version; 
}

@Entity
public class Bar{
    @Id
    private long id;

    private String name;

    @Version
    private int version; 
}

Теперь моя проблема в том, что если я загрузил Foo из entityManager.find(...) и обновил name из Bar как foo.getBar().setName("someAnotherName"); и запустить entityManager.merge(foo), затем Hibernate запускает обновление на Bar и увеличивает версию только на Bar.С точки зрения объекта, это также не меняет состояние Foo и не должно ли оно также увеличивать версию Foo?

Теперь я хотел бы удалить свойство version из Bar и version из Foo должны увеличиваться, если Bar обновляется.Как мне этого добиться?

1 Ответ

3 голосов
/ 24 февраля 2011

В вашем случае не Foo, а сущность, на которую он ссылается, была изменена, поэтому нет необходимости в увеличении версии.

@ Version добавляет возможность оптимистической блокировки к сущности, и ее не следует использоватьв качестве счетчика изменений.Основная цель этой аннотации - обнаружение конфликтующих обновлений, поэтому дважды подумайте, прежде чем делать это.

Единственный способ переопределить это поведение - использовать [OPTIMISTIC |Пессимистический] _FORCE_INCREMENT

...