Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Visualizações e tabelas de mapeamento JPA com herança


Eu especificaria sua view entidade como um relacionamento um para um dentro de seu objeto de modelo com acesso somente leitura, se todas as suas tabelas tiverem um objeto de exibição correspondente. Você pode fazer isso apenas escrevendo getters sem setters, pois disparar qualquer tipo de conjunto e salvar executará uma consulta com falha. O uso de herança como essa o prenderia a ter que especificar todas as suas colunas em um nível e você não saberia quais colunas pertencem a quais tabelas ou visualizações.
    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();
    }

Agrupá-los todos juntos no objeto modelo meio que anula o objetivo de ter o ORM lá em primeiro lugar, porque agora você terá que escrever muito código mysql para corresponder à funcionalidade CRUD básica do ORM. Isso seria redundância do seu lado.

Não usar a herança aqui deixa a herança aberta como uma opção real, caso você opte por usá-la posteriormente. Juntar-se à visualização sempre pode ser ruim para o desempenho, dependendo de quão bem suas visualizações são escritas, é claro, mas não tê-las todas no mesmo objeto permite mais flexibilidade nesse sentido.