Konfiguration einer Entity-Klasse

Ein ORM-Framework mapped konkrete Objekte in eine Datenbank-Tabelle. Hierzu werden programmseitig Klassen für die kontrekten Entitäten (Entity-Class) benötigt. In diesem Artikel wird beschrieben, wie eine solche Entity-Class für APersist erzeugt werden kann.

Um zu zeigen, wie eine solche Klasse zu schreiben ist, nehmen wir an, dass wir eine Entität Car haben, welche folgende Eigenschaften ausweist:

  • Anzahl der Türen
  • Baujahr
  • Kilometerstand
  • Marke
  • Treibstoffart

Für eine solche Entität kann man eine Klasse bereitstellen, die die genannten Attribute ausweist:

public class Car {

  private Integer doorCount;

  private Integer year;

  private Double mileage;

  private String brand;

  private String fuel;

  public Integer getDoorCount() {
    return doorCount;
  }

  public void setDoorCount( Integer doorCount ) {
    this.doorCount = doorCount;
  }

  public Integer getYear() {
    return year;
  }

  public void setYear( Integer year ) {
    this.year = year;
  }

  public Double getMileage() {
    return mileage;
  }

  public void setMileage( Double mileage ) {
    this.mileage = mileage;
  }

  public String getBrand() {
    return brand;
  }

  public void setBrand( String brand ) {
    this.brand = brand;
  }

  public String getFuel() {
    return fuel;
  }

  public void setFuel( String fuel ) {
    this.fuel = fuel;
  }

}

Wichtig: APersist benötigt die Getter und Setter für die Attribute.

Für die Konfiguration als APersist-Entität fehlen an dieser Stelle nur noch einige Annotationen:

1. @PersistenceClass

Alle Entity-Classes, die von APersist verwaltet werden, benötigen die Annoation @PersistenceClass an der Klasse, damit diese auch als solche erkannt werden.

2. @Column

Alle Attribute der Entität, die persistiert werden sollen, müssen mit @Column annotiert werden. Dabei ist interessant zu wissen, wie APersist die Daten mit den jeweiligen Typen ablegt. Für Zahlen-Typen wie int, long oder Double wird die numerische Repräsentation in der Datenbank hinterlegt. Für den Typ Date wird die String-Repräsentation im Forman dd.MM.yyy-hh:mm:sspersistiert. Für alle anderen Typen wird die String-Repräsentation abgelegt, die über die Standard-Methode toString() zurückgegeben wird. So ist es auch kein Problem Enums als Typ zu verwenden.

Beispielsweise könnte die Treibstoffart im o.g. Beispiel als Enum abgebildet werden. Die Entity-Class würde dann wie folgt aussehen:


@PersistenceClass
public class Car {

  @Column
  private Integer doorCount;

  @Column
  private Integer year;

  @Column
  private Double mileage;

  @Column
  private String brand;

  @Column
  private Fuel fuel;

  ...

Jedes Objekt dieser Entity-Class wird in einen Datensatz umgewandelt. Ein Datensatz muss in der Datenbank eindeutig identifizierbar sein. Dazu wird im Allgemeinen eine ID verwendet. Diese muss als zusätzliches Attribut vom Typ Long in der Entity-Class aufgenommen werden und mit @ID annotiert werden. Wenn man die Vergabe der ID dem Framework überlassen möchte, dann muss der Parameter autoincrement = true der @ID-Annotation gesetzt werden.

Das unten stehende Beispiel zeigt die Entity-Class Car mit einer vom Framework generierten ID:

@PersistenceClass
public class Car {

  @Id(autoincrement = true )
  private Long id;
  
  @Column
  private Integer doorCount;

  @Column
  private Integer year;

  @Column
  private Double mileage;

  @Column
  private String brand;

  @Column
  private Fuel fuel;

  public Long getId() {
    return id;
  }

  public void setId( Long id ) {
    this.id = id;
  }

  public Integer getDoorCount() {
    return doorCount;
  }

  public void setDoorCount( Integer doorCount ) {
    this.doorCount = doorCount;
  }

  public Integer getYear() {
    return year;
  }

  public void setYear( Integer year ) {
    this.year = year;
  }

  public Double getMileage() {
    return mileage;
  }

  public void setMileage( Double mileage ) {
    this.mileage = mileage;
  }

  public String getBrand() {
    return brand;
  }

  public void setBrand( String brand ) {
    this.brand = brand;
  }

  public Fuel getFuel() {
    return fuel;
  }

  public void setFuel( Fuel fuel ) {
    this.fuel = fuel;
  }

}

Selbstverständlich ist es auch möglich andere Entitäten als Attribute mittels APersist zu verwalten. Da die Erklärungen hierzu allerdings den Rahmen des Artikels sprengen würden, können diese im Artikel Konfiguration einer Entität als Attribut einer anderen Entität nachgelesen werden.

Schreibe einen Kommentar