{"id":69,"date":"2018-06-08T07:28:08","date_gmt":"2018-06-08T05:28:08","guid":{"rendered":"http:\/\/gundermann2.bplaced.net\/htdocs\/wordpress\/?p=69"},"modified":"2018-06-08T08:14:02","modified_gmt":"2018-06-08T06:14:02","slug":"konfiguration-einer-entity-klasse","status":"publish","type":"post","link":"https:\/\/blog.nigdev.de\/?p=69","title":{"rendered":"Konfiguration einer Entity-Klasse"},"content":{"rendered":"<p>Ein ORM-Framework mapped konkrete Objekte in eine Datenbank-Tabelle. Hierzu werden programmseitig Klassen f\u00fcr die kontrekten Entit\u00e4ten <em>(Entity-Class)<\/em> ben\u00f6tigt. In diesem Artikel wird beschrieben, wie eine solche <em>Entity-Class<\/em> f\u00fcr APersist erzeugt werden kann.<\/p>\n<p><!--more--><\/p>\n<p>Um zu zeigen, wie eine solche Klasse zu schreiben ist, nehmen wir an, dass wir eine Entit\u00e4t <em>Car<\/em> haben, welche folgende Eigenschaften ausweist:<\/p>\n<ul>\n<li>Anzahl der T\u00fcren<\/li>\n<li>Baujahr<\/li>\n<li>Kilometerstand<\/li>\n<li>Marke<\/li>\n<li>Treibstoffart<\/li>\n<\/ul>\n<p>F\u00fcr eine solche Entit\u00e4t kann man eine Klasse bereitstellen, die die genannten Attribute ausweist:<\/p>\n<pre><code class=\"java\">public class Car {\r\n\r\n  private Integer doorCount;\r\n\r\n  private Integer year;\r\n\r\n  private Double mileage;\r\n\r\n  private String brand;\r\n\r\n  private String fuel;\r\n\r\n  public Integer getDoorCount() {\r\n    return doorCount;\r\n  }\r\n\r\n  public void setDoorCount( Integer doorCount ) {\r\n    this.doorCount = doorCount;\r\n  }\r\n\r\n  public Integer getYear() {\r\n    return year;\r\n  }\r\n\r\n  public void setYear( Integer year ) {\r\n    this.year = year;\r\n  }\r\n\r\n  public Double getMileage() {\r\n    return mileage;\r\n  }\r\n\r\n  public void setMileage( Double mileage ) {\r\n    this.mileage = mileage;\r\n  }\r\n\r\n  public String getBrand() {\r\n    return brand;\r\n  }\r\n\r\n  public void setBrand( String brand ) {\r\n    this.brand = brand;\r\n  }\r\n\r\n  public String getFuel() {\r\n    return fuel;\r\n  }\r\n\r\n  public void setFuel( String fuel ) {\r\n    this.fuel = fuel;\r\n  }\r\n\r\n}\r\n<\/code><\/pre>\n<p><span style=\"color: #ff0000;\">Wichtig: APersist ben\u00f6tigt die Getter und Setter f\u00fcr die Attribute.<\/span><\/p>\n<p>F\u00fcr die Konfiguration als APersist-Entit\u00e4t fehlen an dieser Stelle nur noch einige Annotationen:<\/p>\n<h2>1. @PersistenceClass<\/h2>\n<p>Alle <em>Entity-Classes<\/em>, die von APersist verwaltet werden, ben\u00f6tigen die Annoation <em>@PersistenceClass<\/em> an der Klasse, damit diese auch als solche erkannt werden.<\/p>\n<h2>2. @Column<\/h2>\n<p>Alle Attribute der Entit\u00e4t, die persistiert werden sollen, m\u00fcssen mit @Column annotiert werden. Dabei ist interessant zu wissen, wie APersist die Daten mit den jeweiligen Typen ablegt. F\u00fcr Zahlen-Typen wie <em>int<\/em>, <em>long<\/em> oder <em>Double<\/em> wird die numerische Repr\u00e4sentation in der Datenbank hinterlegt. F\u00fcr den Typ <em>D<\/em><em>ate<\/em> wird die String-Repr\u00e4sentation im Forman <em>&#8222;<span class=\"pl-s\">dd.MM.yyy-hh:mm:ss<\/span>&#8220; <\/em>persistiert. F\u00fcr alle anderen Typen wird die String-Repr\u00e4sentation abgelegt, die \u00fcber die Standard-Methode <em>toString()<\/em> zur\u00fcckgegeben wird. So ist es auch kein Problem Enums als Typ zu verwenden.<\/p>\n<p>Beispielsweise k\u00f6nnte die Treibstoffart im o.g. Beispiel als Enum abgebildet werden. Die <em>Entity-Class<\/em> w\u00fcrde dann wie folgt aussehen:<\/p>\n<pre><code lang=\"java\">\r\n@PersistenceClass\r\npublic class Car {\r\n\r\n  @Column\r\n  private Integer doorCount;\r\n\r\n  @Column\r\n  private Integer year;\r\n\r\n  @Column\r\n  private Double mileage;\r\n\r\n  @Column\r\n  private String brand;\r\n\r\n  @Column\r\n  private Fuel fuel;\r\n\r\n  ...\r\n\r\n<\/code><\/pre>\n<p>Jedes Objekt dieser <em>E<\/em><em>ntity-Class<\/em> 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\u00e4tzliches Attribut vom Typ <em>Long<\/em> in der <em>Entity-Class<\/em> aufgenommen werden und mit <em>@ID <\/em>annotiert werden. Wenn man die Vergabe der ID dem Framework \u00fcberlassen m\u00f6chte, dann muss der Parameter <em><span class=\"pl-c1\">autoincrement<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">true<\/span> <\/em>der <em>@ID<\/em>-Annotation gesetzt werden.<\/p>\n<p>Das unten stehende Beispiel zeigt die <em>Entity-Class Car <\/em>mit einer vom Framework generierten ID:<\/p>\n<pre><code lang=\"java\">@PersistenceClass\r\npublic class Car {\r\n\r\n  @Id(autoincrement = true )\r\n  private Long id;\r\n  \r\n  @Column\r\n  private Integer doorCount;\r\n\r\n  @Column\r\n  private Integer year;\r\n\r\n  @Column\r\n  private Double mileage;\r\n\r\n  @Column\r\n  private String brand;\r\n\r\n  @Column\r\n  private Fuel fuel;\r\n\r\n  public Long getId() {\r\n    return id;\r\n  }\r\n\r\n  public void setId( Long id ) {\r\n    this.id = id;\r\n  }\r\n\r\n  public Integer getDoorCount() {\r\n    return doorCount;\r\n  }\r\n\r\n  public void setDoorCount( Integer doorCount ) {\r\n    this.doorCount = doorCount;\r\n  }\r\n\r\n  public Integer getYear() {\r\n    return year;\r\n  }\r\n\r\n  public void setYear( Integer year ) {\r\n    this.year = year;\r\n  }\r\n\r\n  public Double getMileage() {\r\n    return mileage;\r\n  }\r\n\r\n  public void setMileage( Double mileage ) {\r\n    this.mileage = mileage;\r\n  }\r\n\r\n  public String getBrand() {\r\n    return brand;\r\n  }\r\n\r\n  public void setBrand( String brand ) {\r\n    this.brand = brand;\r\n  }\r\n\r\n  public Fuel getFuel() {\r\n    return fuel;\r\n  }\r\n\r\n  public void setFuel( Fuel fuel ) {\r\n    this.fuel = fuel;\r\n  }\r\n\r\n}<\/code><\/pre>\n<p>Selbstverst\u00e4ndlich ist es auch m\u00f6glich andere Entit\u00e4ten als Attribute mittels APersist zu verwalten. Da die Erkl\u00e4rungen hierzu allerdings den Rahmen des Artikels sprengen w\u00fcrden, k\u00f6nnen diese im Artikel <a href=\"http:\/\/gundermann2.bplaced.net\/htdocs\/wordpress\/?p=3\">Konfiguration einer Entit\u00e4t als Attribut einer anderen Entit\u00e4t<\/a> nachgelesen werden.<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?hashtags=APersist&#038;via=NielsGundermann\" class=\"twitter-share-button\">Twittern<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ein ORM-Framework mapped konkrete Objekte in eine Datenbank-Tabelle. Hierzu werden programmseitig Klassen f\u00fcr die kontrekten Entit\u00e4ten (Entity-Class) ben\u00f6tigt. In diesem Artikel wird beschrieben, wie eine solche Entity-Class f\u00fcr APersist erzeugt werden kann.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[7],"_links":{"self":[{"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=\/wp\/v2\/posts\/69"}],"collection":[{"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=69"}],"version-history":[{"count":9,"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=\/wp\/v2\/posts\/69\/revisions"}],"predecessor-version":[{"id":98,"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=\/wp\/v2\/posts\/69\/revisions\/98"}],"wp:attachment":[{"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nigdev.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}