tualizando a versão de hibernação manualmen
Tenho duas classes que Foo e Bar mapearam como @OneToOne (bidirecional) usando o Hibernate (3.6.1 final) com JPA (2.0) como -
@Entity
public class Foo{
@Id
private Long id;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "foo")
private Bar bar;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "foo")
private Qux qux;
@Version
private int version;
// getters and setters omitted
}
@Entity
public class Bar{
@Id
private Long id;
@OneToOne
@JoinColumn(name = "foo_id", nullable = false)
private Foo foo;
// getters and setters omitted
}
@Entity
public class Qux {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "foo_id", nullable = false)
private Foo foo;
// getters and setters omitted
}
Observe que - Bar e Qux não tem@Version
column
Se atualizarmos o Bar, o hibernate não aumentará a versão do Foo e o mesmo para o Qux. Mas nossa lógica de negócios precisa - se alguém atualizar Bar no Foo e outro segmento estiver tentando atualizar o Qux do mesmo Foo, mas não tiver o Bar atualizado e vice-versa, essas atualizações falharã
Como o hibernate não atualiza a propriedade version do Foo se atualizarmos o Bar, decidimos atualizar a versão do Foo manualmente (eu sei que é bem estranho e não recomendado) se atualizarmos o Bar e o Qu
Funciona perfeitamente bem .. mas estou preocupado com alguns casos extremos de concorrência que podem falhar ou ter comportamento não intenciona
É seguro fazer esse tipo de ajuste na versão para esse fim? OU existe outra alternativa melhor para isso (eu já tentei aumentar a força otimista / pessimista)