Ruhezustand Viele-zu-Viele-Beziehungskonfiguration und verzögertes Laden von Aufsätzen

1. So konfigurieren Sie die Viele-zu-Viele-Beziehung

  有三张表 role、permission,分别是角色与权限表,二者是多对多关系,对应关系的中间表为p_role_permission,中间表中r_sysId对应role表中的主键sysId、中间表中p_sysId列对应permission表中的主键sysId(说白了就是中间表中两列是外键列分别指向role和permission表)。下面代码是role表对应的注解配置实体类


@Entity
@Table(name="role",catalog="byky")
     pubic class Role{
        	......
        	@ManyToMany(fetch=FetchType.LAZY)
        	@JoinTable(name="p_role_permission",joinColumns=     {@JoinColumn(name="r_sysId",referencedColumnName = "sysId")},inverseJoinColumns={@JoinColumn(name="p_sysId",referencedColumnName = "sysId")})
        	  public Set<Permission> getPermissions() {
        			return permissions;
        	  }
        	......
        } 
  • Der Abrufwert in der Annotation @ManyToMany kann mit zwei Optionen konfiguriert werden: fetch = FetchType.LAZY bedeutet verzögertes Laden mithilfe der Proxy-Technologie. Wenn das Rollenobjekt geladen wird, wird das Berechtigungsattribut des Rollenobjekts nicht vorübergehend geladen, wenn das getPermissions () der Rolle wird aufgerufen, der Ruhezustand übernimmt dies. Fragen Sie die Datenbank ab, um die Daten zu laden. Ein Punkt muss besonders hervorgehoben werden. Beim verzögerten Laden muss die Sitzung im Ruhezustand geöffnet sein. Die dem aktuellen Rollenobjekt zugeordnete Sitzung wird geschlossen. Beim Aufrufen der Berechtigungseigenschaft des Rollenobjekts tritt ein Fehler com.sun.jdi.InvocationException auf gemeldet werden. Achten Sie daher darauf, den Attributwert für das verzögerte Laden nach dem Schließen der Sitzung nicht abzurufen. Es ist üblich, ihn in Contreller aufzurufen, es sei denn, Sie verwenden deklarative Elemente, um das Schließen der Methode getCurrentSession zu verzögern.
  • @ManyToMany-Annotation in der Abrufwertkonfiguration fetch = FetchType.EAGER bedeutet, dass beim sofortigen Laden die Daten nicht gelesen werden können, wenn die Sitzung geschlossen wird, jedoch Redundanz bei Datenabfragen verursacht wird und unbrauchbare Attribute auf einmal ausgelesen werden Druck auf die Datenbank.
  • Der Name = "p_role_permission" in @JoinTable konfiguriert den Namen der Zwischentabelle, joinColumns = {@JoinColumn (name = "r_sysId", referencedColumnName = "sysId")} in @JoinColumn (name = "r_sysId" konfiguriert die aktuelle Klassenkorrespondenz Das Fremdschlüsselfeld der Tabelle in der Zwischentabelle referencedColumnName = "sysId" konfiguriert das Primärschlüsselfeld, das dem Fremdschlüssel der Zwischentabelle in der aktuellen Klasse entspricht;
    inverseJoinColumns = {@ JoinColumn (name = "p_sysId", referencedColumnName = "sysId")} Ja Bezieht sich auf eine andere Tabellenberechtigung, die der aktuellen Klasse many-to-many entspricht. Die erste @JoinColumn (name = "p_sysId" ist auch das Fremdschlüsselfeld, das der Berechtigungstabelle in der Zwischentabelle referenziertColumnName = entspricht "sysId") nur die Berechtigung und die Zwischentabelle Das Primärschlüsselfeld sysId, das dem Fremdschlüsselfeld p_sysId entspricht.
  • Kaskadenkaskadenbetrieb ist wichtiger, geben Sie einen separaten Titel an, um dies zu erklären.

2. Kaskadenkaskadenbetrieb

Die Kaskadenoperation von Hibernate richtet sich an Objekte und Objekte. Dies lässt sich an den konfigurierbaren Elementen der Kaskade ablesen. Verwechseln Sie sie nicht mit der Kaskadenoperation in der Datenbank, wenn Sie sie berücksichtigen.
Zwei Kaskadenkonfigurationen:

Konfigurieren Sie die Anmerkungen von @OneToOne, @OneToMany, @ManyToOne, @ManyToMany mithilfe von javax.persistence.CascadeType, der JPA-Konfiguration

 @ManyToMany(fetch=FetchType.LAZY,casecade={CasecadeType.DETACH,CascadeType.MERGE})

Der Inhalt von casecade ist ein Array von CasecadeType. Es können mehrere Inhalte konfiguriert werden. Wenn nur ein Konfigurationselement vorhanden ist, kann es direkt als casecade = CasecadeType.DETACH geschrieben werden. Das Formular im Code sieht folgendermaßen aus

@ManyToMany(fetch=FetchType.LAZY,casecade=CascadeType.MERGE)

Eine andere Konfigurationsmethode ist die Verwendung von org.hibernate.annotations.CascadeType, dh das Konfigurationsformular für Annotationen im Ruhezustand lautet wie folgt

@ManyToMany(fetch=FetchType.LAZY)
@Cascade(value={ org.hibernate.annotations.CascadeType.DETACH})
@JoinTable(name="p_role_permission",joinColumns={@JoinColumn(name="r_sysId",referencedColumnName = "sysId")},inverseJoinColumns={@JoinColumn(name="p_sysId",referencedColumnName = "sysId")})
public Set<PPermission> getPermissions() {
	return permissions;
}

Es ist ersichtlich, dass die Annotation @Casecade verwendet wird, wobei der Wert value ein Array vom Typ org.hibernate.annotations.CascadeType ist, das mit mehreren Werten konfiguriert oder ein Wert festgelegt werden kann.
Casecade-Funktion: Gibt an, ob die Objekte im mit Anmerkungen versehenen Feld kaskadiert werden sollen. Optionale Werte bei Verwendung der JPA-Einstellungen : javax.persistence.CascadeType.PERSIST, MERGE, REMOVE, REFRESH, DETACH, ALL. Eine oder mehrere von ihnen können ausgewählt werden. Bei Auswahl einer können die geschweiften Klammern verwendet werden oder nicht

Optionaler Wert Beschreibung
FORTDAUERN Der persistente Betrieb der kaskadierten Sitzung. Angenommen, die Annotation @ManyToMany der Schülerklasse und des Lehrerfelds ist mit cascade = {CascadeType.PERSIST} konfiguriert. Wenn das Objekt stu1 eine Lehrersammlung festlegt (die Objekte in dieser Sammlung sind vorübergehend), ist das Objekt stu1d beibehalten, Alle vorübergehenden Objekte in dieser Sammlung werden kaskadiert und in der Datenbank beibehalten.
VERSCHMELZEN Kaskaden-Zusammenführungsvorgang. Das gleiche wie oben
AKTUALISIERUNG Kaskadenaktualisierungsvorgang. Das gleiche wie oben
ENTFERNEN Kaskadenentfernungsvorgang. Das gleiche wie oben
ABLÖSEN Kaskadenräumungsoperation. Das gleiche wie oben
ALLE Kaskadieren Sie alle oben genannten Operationen
Die ersten fünf Auswahlwerte oben sind jeweils der Methode in der Sitzung zugeordnet, und nur die entsprechende Methode kann ausgelöst werden

Wenn Sie den von Hibernate selbst mit Anmerkungen versehenen CascadeType verwenden, lauten die optionalen Werte wie folgt:

Optionaler Wert Beschreibung
LÖSCHEN Die Löschmethode in einer kaskadierten Sitzung
DELETE_ORPHAN Veraltet und nicht empfohlen
ABLÖSEN Entspricht CPAadeType.DETACH von JPA
EVICT Veraltet, bitte verwenden Sie den vorherigen DETACH
VERSCHMELZEN Entspricht CascadeType.MERGE
FORTDAUERN Entspricht CascadeType.PERSIST
AKTUALISIERUNG Entspricht CascadeType.REFRESH
ENTFERNEN Entspricht CascadeType.REMOVE.
REPLICATE REPLICATE-Methode in einer kaskadierten Sitzung
SAVE_UPDATE Drei Methoden zum Kaskadieren von session.save () oder session.update () oder session.saveOrUpdate ()
ALLE Kaskadieren Sie alle oben genannten Operationen

Beachten Sie, dass eine unsachgemäße Verwendung des Kaskadenbetriebs die Leistung beeinträchtigt

Ich denke du magst

Origin blog.csdn.net/u011930054/article/details/87690287
Empfohlen
Rangfolge