2015-10-05 11 views
0

У меня есть код, и я использую envers, и он отлично работает. Я получаю аудит в отдельной таблице _AUD. Но позже мне нужно использовать оптимистичную блокировку. Но это не работает с аннотацией @Audited. Вот мой кодHibernate @Audited conflict @Version

@MappedSuperclass 
@Audited 
public class BaseVO implements IXtrainVO 
{ 
    @Version 
    @Column(name = "Version") 
    private long version; 
} 

@Entity 
@Table(name = "Person") 
@Audited 
public class PersonVO extends BaseVO 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "PersonId", unique = true, nullable = false) 
    private Long personId; 

    @Column(name = "Name", length = 80, nullable = false) 
    @NotBlank 
    @Size(max = 80) 
    private String name; 
} 


@Test 
public void testLocking() throws Exception 
{ 
    PersonVO person = new PersonVO(); 
    person.setName("John"); 
    Long personId = personManager.savePerson(person); 
    PersonVO copy1 = personManager.findPerson(personId); 
    PersonVO copy2 = personManager.findPerson(personId); 
    copy1.setName("John1"); 
    personManager.updatePerson(copy1); 
    copy2.setName("John2"); 
    personManager.updatePerson(copy2); 
} 

Код должен поднять ошибку блокировки с оптимизацией, но это не так. Вместо этого я получаю

Caused by: java.sql.SQLException: Field 'Version' doesn't have a default value.

Но когда я удалить @Audited аннотацию, оптимистические работы и я получаю HibernateOptimisticLockingFailureException который я ожидал. Известно ли, что эти 2 аннотации не очень хорошо сочетаются друг с другом? Я также попытался положить @NotAudited на колонке версии, но до сих пор не работают

ответ

0

Я был в состоянии решить, используя обсуждение в Java - JPA - @Version annotation

мне нужно, чтобы иметь значение по умолчанию на уровне БД. При вставке значение по умолчанию отсутствует. Но последующие обновления будут увеличиваться и проверять оптимистичную блокировку

 Смежные вопросы

  • Нет связанных вопросов^_^