sql >> Databáze >  >> RDS >> Mysql

JPA mapování pohledů a tabulek s dědičností

Upřesnil bych váš view entitu jako vztah jedna ku jedné uvnitř vašeho objektu modelu s přístupem pouze pro čtení, pokud všechny vaše tabulky mají odpovídající objekt zobrazení. Můžete to udělat jednoduše napsáním getterů bez setterů, protože vypálením libovolné sady a následným uložením se spustí neúspěšný dotaz. Použitím dědičnosti, jako je tato, byste se dostali do toho, že budete muset zadat všechny sloupce na jedné úrovni a nebudete vědět, které sloupce patří ke kterým tabulkám nebo zobrazením.

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

Shrnutí všech dohromady v modelovém objektu tak trochu maří cíl mít tam ORM, protože nyní budete muset napsat spoustu mysql kódu, aby odpovídal základní funkcionalitě CRUD ORM. To by byla z vaší strany redundance.

Pokud zde nepoužijete dědičnost, ponecháte dědičnost otevřenou jako skutečnou možnost, pokud se rozhodnete ji použít později. Pokaždé připojení k pohledu může být špatné pro výkon v závislosti na tom, jak dobře jsou vaše pohledy napsány, samozřejmě, ale to, že je nemáte všechny ve stejném objektu, umožňuje v tomto smyslu větší flexibilitu.




  1. Cizí klíče MySQL – jak vynutit individuální přístup napříč tabulkami?

  2. mysql objednávka varchar pole jako celé číslo

  3. chyba:nelze najít php_pdo_driver.h při instalaci pdo_mysql

  4. Oracle ORA-30004 při použití funkce SYS_CONNECT_BY_PATH,