Mysql
 sql >> Base de données >  >> RDS >> Mysql

Vues et tables de mappage JPA avec héritage

Je préciserais votre view entité en tant que relation un à un à l'intérieur de votre objet de modèle avec un accès en lecture seule, si toutes vos tables ont toutes un objet de vue correspondant. Vous pouvez le faire simplement en écrivant des getters sans setters, car le déclenchement de n'importe quel type d'ensemble puis l'enregistrement exécutera une requête défaillante. Utiliser l'héritage comme celui-ci vous obligerait à spécifier toutes vos colonnes dans un seul niveau, et vous ne sauriez pas quelles colonnes appartiennent à quelles tables ou vues.

    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();
    }

Les regrouper tous ensemble dans l'objet modèle va à l'encontre de l'objectif d'avoir l'ORM en premier lieu, car vous devrez maintenant écrire beaucoup de code mysql pour correspondre à la fonctionnalité CRUD de base de l'ORM. Ce serait une redondance de votre côté.

Ne pas utiliser l'héritage ici laisse l'héritage ouvert comme une option réelle si vous choisissez de l'utiliser plus tard. Rejoindre la vue à chaque fois peut être mauvais pour les performances en fonction de la qualité de l'écriture de vos vues bien sûr, mais ne pas les avoir toutes dans le même objet permet plus de flexibilité dans ce sens.