Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JPA-Zuordnungsansichten und -tabellen mit Vererbung

Ich würde Ihre view angeben Entität als eine Eins-zu-Eins-Beziehung innerhalb Ihres Modellobjekts mit schreibgeschütztem Zugriff, wenn alle Ihre Tabellen ein entsprechendes Ansichtsobjekt haben. Sie könnten dies tun, indem Sie einfach Getter ohne Setter schreiben, da das Auslösen einer beliebigen Menge und das anschließende Speichern eine fehlschlagende Abfrage ausführen. Die Verwendung einer solchen Vererbung würde Sie dazu zwingen, alle Ihre Spalten auf einer Ebene anzugeben, und Sie würden nicht wissen, welche Spalten zu welchen Tabellen oder Ansichten gehören.

    Table.java
    package models;
    // relevant imports
    @entity("table")
    public class Table{
        @OneToOne(mappedBy = "table")
        private View view;
        public string getVariable();
        public string setVaraible();
    }

    View.java
    package models;
    // relevant imports
    @entity("view")
    public class View{
       @OneToOne
       @JoinColumn(name = "table_id")
       private Table table;

       public string getVariable();
       public string getVariable2();
       public string getVariable3();//etc, No setters.

       //alternatively use insertable//updateable=false on all column annotation
       @Column(name="variable_4", insertable =  false, updateable=false)
       public string getVariable4();
    }

Sie alle zusammen in das Modellobjekt zu werfen, macht das Ziel, das ORM überhaupt dort zu haben, irgendwie zunichte, denn jetzt müssen Sie eine Menge MySQL-Code schreiben, um die grundlegende CRUD-Funktionalität des ORM zu erfüllen. Dies wäre Redundanz auf Ihrer Seite.

Wenn Sie die Vererbung hier nicht verwenden, bleibt die Vererbung als tatsächliche Option offen, falls Sie sich später dafür entscheiden, sie zu verwenden. Je nachdem, wie gut Ihre Ansichten geschrieben sind, kann es sich natürlich nachteilig auf die Leistung auswirken, jedes Mal der Ansicht beizutreten, aber nicht alle im selben Objekt zu haben, ermöglicht in diesem Sinne mehr Flexibilität.