Używam Spring (3.2.4.RELEASE) i Hibernate (4.2.8.Final) w moim projekcie i przy użyciu konfiguracji JPA.
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
...
</bean>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
Używam mechanizmów optymalizacji blokowania hibernacji, jak poniżej.
@Entity
public class Entity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Version
@Generated(GenerationTime.ALWAYS)
private int version;
}
Moje pytanie brzmi, kiedy aktualizuję Entity o złą wersję, dlaczego to jest rzut
org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException
nie
org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException
?
Odpowiedzi:
1 dla odpowiedzi № 1spring-orm-3.2.4.RELEASE zawiera pakiety dla obu org.springframework.orm.hibernate3. * i org.springframework.orm.hibernate4. *.
Więc nawet jeśli masz hibernację w wersji 4.2.8.słoik w bibliotece projektu, gdy używasz danych sprężynowych jpa, na jakiejkolwiek niepoprawnej operacji bazy danych do konwertowania wszystkich sprawdzonych wyjątków na niezaznaczone (uruchomione) wyjątki hibernacji HibernateExceptionTranslator jest używany z org.springframework.orm.hibernate4.HibernateExceptionTranslator.
Upewnij się, że użyłeś org.springframework.orm.hibernate3.HibernateExceptionTranslator w pliku konfiguracyjnym komponentu bean, jeśli chcesz używać wersji 3.0.