Fehlende Version-Spalte für JPA-Entity-Bean
JPA-Entity-Beans bestehen normalerweise aus Properties mit entsprechenden Gettern und Settern. Durch einen Fehler gab es für die Property version keinen Setter. Der Getter war mit @Version annotiert.
@Entity
public class Car {
private Long id;
private long version;
private String name;
private int numberOfWheels;
private String brand;
@Id
@SequenceGenerator(name = "car_sequence_generator",
sequenceName = "car_sequence",
allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "car_sequence_generator")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
@Column(nullable = false)
public long getVersion() {
return version;
}
// <<<<<<<<<<<<<<<<< hier fehlt der Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumberOfWheels() {
return numberOfWheels;
}
public void setNumberOfWheels(int numberOfWheels) {
this.numberOfWheels = numberOfWheels;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
Durch diese Konstellation wird mit OpenJPA in Version 2.4.2 keine Spalte im DDL-Skript generiert. Auch das einfache Hinzufügen einer Version-Spalte in der Datenbank hilft nicht dabei, dass der OptimisticLock-Mechanismus funktioniert. Der Setter ist also zwingend notwendig. Bei parallelem Zugriff werden sonst die Daten überschrieben.