Mysql
 sql >> Database >  >> RDS >> Mysql

Visualizzazioni e tabelle di mappatura JPA con ereditarietà

Vorrei specificare la tua view entità come una relazione uno a uno all'interno dell'oggetto modello con accesso di sola lettura, se tutte le tabelle hanno un oggetto vista corrispondente. Puoi farlo semplicemente scrivendo getter senza setter, poiché l'attivazione di qualsiasi tipo di set e il salvataggio eseguiranno una query non riuscita. L'utilizzo di un'ereditarietà in questo modo ti bloccherebbe nella necessità di specificare tutte le colonne in un livello e non saprai quali colonne appartengono a quali tabelle o viste.

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

Raggrupparli tutti insieme nell'oggetto modello in qualche modo sconfigge l'oggetto di avere l'ORM lì in primo luogo, perché ora dovrai scrivere molto codice mysql per abbinare la funzionalità CRUD di base dell'ORM. Questa sarebbe una ridondanza da parte tua.

Non utilizzare l'ereditarietà qui lascia l'ereditarietà aperta come opzione effettiva se si sceglie di utilizzarla in un secondo momento. Partecipare alla visualizzazione ogni volta può essere dannoso per le prestazioni a seconda di quanto bene sono scritte le visualizzazioni, ma non averle tutte nello stesso oggetto consente una maggiore flessibilità in questo senso.