zurück zum Artikel

Hibernate-Tipp: Wie können schreibgeschützte Datenbank-Views auf Entitäten abgebildet werden?

Thorben Janssen

Die Hibernate-Tipps-Serie bietet schnelle und einfache Lösungen zu verbreiteten Hibernate-Fragen. Dieses Mal geht es um die Verwendung schreibgeschützter Datenbank-Views.

Die Hibernate-Tipps-Serie bietet schnelle und einfache Lösungen zu verbreiteten Hibernate-Fragen. Dieses Mal geht es um die Verwendung schreibgeschützter Datenbank-Views.

Wie lässt sich an eine schreibgeschützte Datenbank-View mithilfe von Hibernate auf eine Entität abbilden?

Mehr Infos

Hibernate-Tipps – die Serie

Datenbank-Views werden grundsätzlich auf die gleiche Art und Weise abgebildet wie Tabellen. Es wird lediglich eine Entität benötigt, die eine oder mehrere Spalten der View abbildet. Der einzige Unterschied besteht häufig darin, dass Datenbank-Views je nach Definition und verwendeter Datenbank ausschließlich lesende Zugriffe erlauben. Das sollte dann auch im Domänenmodell entsprechend abgebildet werden. Hibernate bietet dazu die @Immutable-Annotation.

Das folgende Beispiel zeigt eine Entität, die die schreibgeschützte Datenbank-View bookview mit den Spalten id, version, title und publishingDate abbildet.

@Entity
@Immutable
public class BookView {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Version
@Column(name = "version")
private int version;

@Column
private String title;

@Column
@Temporal(TemporalType.DATE)
private Date publishingDate;

@Column
private String authors;

...

}

Wenn eine Entität mit @Immutable annotiert ist, ignoriert Hibernate alle Änderungen ihrer Eigenschaften. Somit werden keine Änderungen zur Datenbank geschrieben.

Die Entität kann allerdings für lesende Zugriffe innerhalb von JPQL-Abfragen [3] oder über die bekannte API des EntityManager verwendet werden.

List<BookView> bvs = em.createQuery("SELECT v FROM BookView v",
BookView.class).getResultList();

Mehr als 70 solcher Rezepte zu Themen wie einfache und komplexe Mappingdefinitionen, Logging, Unterstützung von Java 8, Caching sowie die statische und dynamische Erzeugung von Abfragen gibt es in meinem Buch "Hibernate Tips: More than 70 solutions to common Hibernate problems". Es ist als Taschenbuch und E-Book auf Amazon [4] und als PDF auf hibernate-tips.com [5] erhältlich. ( [6])


URL dieses Artikels:
https://www.heise.de/-3784284

Links in diesem Artikel:
[1] https://www.heise.de/blog/Hibernate-Tip-Wie-logge-ich-SQL-statements-und-ihre-Parameter-3704526.html
[2] https://www.heise.de/blog/Hibernate-Tipp-Redundante-Abfragen-mit-Hibernates-Query-Cache-vermeiden-3737681.html
[3] https://www.thoughts-on-java.org/jpql/
[4] https://www.amazon.de/Hibernate-Tips-solutions-common-problems/dp/1544869177
[5] http://www.hibernate-tips.com/
[6] mailto:thjanssen123@gmail.com