Я смотрю на готовые опции (число / дата) для @Version в спящем режиме.У меня есть число, работающее так, как я и ожидал - устанавливает версию равной 0 при начальной вставке, автоматически увеличивается при обновлении, не увеличивает и не мешает обновлению без изменений.Я хотел посмотреть на использование Date и существенно изменил мой пример рабочего кода с Long на Date.Это не работает, и мне было интересно, если кто-нибудь может мне помочь?
Я использую 5.3.6.Final (с Spring)
У меня есть эта сущность
@Entity
@Table (name="Names")
public class Names implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private Date version;
@Id
@Column(name="id", nullable=false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id= id;
}
@Column(name="NAME", length=100)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Version
public Date getVersion() {
return version;
}
public void setVersion(Date version) {
this.version = version;
}
}
У меня есть этот простой тест
@Test
public void test_1 () {
Names n = new Names ();
//1st record
n.setId(1L);
n.setName(“John Doe”);
System.out.println("SAVE 1 BEFORE ");
nameService.saveRuleOfEngagement(roE);
System.out.println("SAVE 1 AFTER ");
В сервисе нет ничего интересного, я так не думаю?
public void saveName(Names n) {
Session currentSession = sessionFactory.getCurrentSession();
currentSession.saveOrUpdate(n);
}
Так что это работало с версией долго, но теперь не получаетсяна обновлении.На самом деле это не пытается обновить.Таким образом, первый запуск теста ставит
1, “John Doe”, 2019-01-28 11:04:55.314
Если я запускаю то же самое снова (с теми же данными или измененным именем), я получаю
SAVE 1 BEFORE
Hibernate:
insert
into
“Names”
(“NAME”, version, “id”)
values
(?, ?, ?)
2019-01-28T11:07:27,008 [main] [WARN] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions(129)] - SQL Error: 0, SQLState: 23505
2019-01-28T11:07:27,008 [main] [ERROR] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions(131)] - ERROR: duplicate key value violates unique constraint “Names_pkey”
Detail: Key (“id”)=(1) already exists.
Когда он использует Long и работает с нимделал выбор потом обновление?Теперь это идет прямо, чтобы вставить и терпит неудачу.Вся помощь, официальная и неофициальная, которую я видел, подразумевает, что это должно работать из коробки?Есть что-то очевидное, что я сделал неправильно?