2017-04-07 2 views
0

Angenommen, es gibt eine Klasse wie folgt aus:Was Winterschlaf mit nicht zugeordneten Spalte tun?

public class Entity { 
    private Long id; 
    private String name; 
} 

und Tabelle mit 3 Spalten: ID, Name und Adresse.

CREATE TABLE entity (
    id NUMBER(9,0), 
    name VARCHAR2(255), 
    address VARCHAR2(1000), 

Dann wurde en Einsatz durchgeführt:

INSERT INTO entity (id, name, address) VALUES (1, "a", "b") 

Dann laden wir und Update Hibernate Einheit:

Session session = ... 
Entity entity = session.get(Entity.class, 1); 

Dann Namen aktualisieren und speichern Sie sie wieder:

entity.setName("newName"); 
session.save(entity); 

Also, was ist die Adressspalte? Wert jetzt - null oder b? Gibt Hibernate einige Strategien für solche Situationen oder ich muss address Feld in Einheit hinzufügen und als @Column(updatable=false, insertable = false) markieren?

+0

Wenn es nicht zugeordnet ist, wird es ignoriert. Der Adresswert ist gleich "b". – owenrb

+3

@Cherry Hast du es versucht? – niksofteng

Antwort

1

Wenn würden Sie die folgenden Eigenschaften in persistence.xml setzen (oder wo Sie Ihre Hibernate Eigenschaften definiert)

<property name="hibernate.show_sql" value="false"/> 
<property name="hibernate.format_sql" value="false"/> 

Dann könnten Sie die Abfragen von Hibernate ausgeführt sehen, wenn der Server im Debug-Modus mit protokollierten ausgeführt wird zum Debuggen konfiguriert.

Wenn Ihr Unternehmen ist

public class Entity { 
    private Long id; 
    private String name; 
    private String secondName; 
    //Getters & Setters 
} 

Dann

SELECT e FROM Entity e WHERE e.id = 121 

unter HQL Ausführung würde Ergebnisse produzieren ähnlich wie

SELECT entity0_.id  AS id1_63_, 
     entity0_.name  AS name6_63_, 
     entity0_.secondName AS secondName6_63_, 
FROM yout_db.Entity entity0_ 
WHERE entity0_.id = 121 

Sie sehen, dass hier SELECT * FROM Entity nicht stattdessen die Felder alle ausgeführt wurde aus der Klasse wurden abgerufen und der Abfrage hinzugefügt. Wenn Sie also ein Feld aus der DB ignoriert haben, wird es NICHT an Abfragen teilnehmen.

Für Select-Update passiert auch dasselbe.

entity.setName("newName"); 
session.save(entity); 

Unten formatiert Abfrage, wenn Sie eine Entität aktualisieren würde:

UPDATE your_db.Entity 
SET name = ? 
     secondName = ? 
WHERE id = ? 

Diese Abfrage ausgeführt wird, auch wenn nur ein Feld geändert wird.

0

Hibernate arbeitet nur mit Spalten, die aus Entitäten stammen, basierend auf dem Eigenschaftsnamen oder in Annotation. In Ihrem Fall wird der Wert "Adresse" also "b" sein.

+0

Könnten Sie bitte so mit dicunentation link beweisen? – Cherry

Verwandte Themen