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.


Kommentare oder Kontakt gern über Twitter oder die anderen Plattformen.