Beans/Model

Andre Schemschat

Der Server setzt zur Datenhaltung auf das ORM-Framework Hibernate. Dies basiert darauf, dass sogenannte Java-Beans oder POJOs (Plain old java objects) mit Hilfe von Annotations oder XML-Mappings auf eine relationale Datenbanktabelle abgebildet werden. Diese Beans bilden die Modelschicht der Architektur. Alle Objekte die im Rahmen der Spiellogik verarbeitet werden sind mit einer Bean und einem Eintrag in einem Mapping vertreten. Im Zusammenhang mit Hibernate gibt es jedoch bei den Beans einige Besonderheiten, die sie von normalen Java-Beans abheben. Jede Bean muss einen öffentlichen Standard-Konstruktor enthalten, der keine Parameter erwartet. Zudem muss für jede Variable, die gespeichert werden soll, ein Getter und Setter vorhanden sein. Im Falle der Setter dürfen weiter keine Gültigkeitsprüfungen, im speziellen eine Überprüfung auf Null, stattfinden, da Hibernate nicht zusichert, dass ein Objekt direkt korrekt initialisiert wird. Die beiden Beispiele unten zeigen eine exemplarische Bean und ein Mapping für diese Bean.

public class Player extends Node {
    private User user;
    private Team team;
    private int highscore;
 
    protected Player() {
        this.user = null;
        this.team = null;   
        this.highscore = 0;
    }
 
    public Player(User user, Point coordinate) {
        this();
        setUser(user);
    }
 
    // getter und setter
}
Beispiel einer Bean
<class name="Player" table="players">
    <id name="id" column="id" >
        <generator class="sequence">
            <param name="sequence">nodes_id_seq</param>
        </generator>
    </id>
 
    <many-to-one name="user"
                 column="user_id"
                 class="core.data.authentication.User"
                 not-null="true"
                 unique="true" />
 
    <many-to-one name="team"
                 column="team_id"
                 class="core.data.game.Team" />
 
    <property name="highscore" />
</class>
Beispiel eines XML-Mappings


Page last modified on March 21, 2011, at 10:15 AM