sql >> Base de Datos >  >> RDS >> Mysql

Vistas de mapeo JPA y tablas con herencia.

Especificaría tu view entidad como una relación uno a uno dentro de su objeto modelo con acceso de solo lectura, si todas sus tablas tienen un objeto de vista correspondiente. Puede hacer esto simplemente escribiendo getters sin setters, ya que activar cualquier tipo de conjunto y luego guardar ejecutará una consulta fallida. Usar una herencia como esta lo obligaría a tener que especificar todas sus columnas en un nivel, y no sabría qué columnas pertenecen a qué tablas o vistas.

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

Agruparlos a todos juntos en el objeto modelo anula el objeto de tener el ORM allí en primer lugar, porque ahora tendrá que escribir mucho código mysql para que coincida con la funcionalidad CRUD básica del ORM. Esto sería una redundancia de su parte.

No usar la herencia aquí deja la herencia abierta como una opción real en caso de que elija usarla más adelante. Unirse a la vista cada vez puede ser malo para el rendimiento dependiendo de qué tan bien estén escritas sus vistas, por supuesto, pero no tenerlas todas en el mismo objeto permite una mayor flexibilidad en ese sentido.