2016-09-29 2 views
2

Ich habe ein Objektmodell, das wie folgt aussieht:Warum ignoriert CrudRepository eine @Column?

public class Agreement { 
    @Id @Column(name = "AGREEMENT_ID") private String agreementId; 

    @Column(name = "RATE") private String rate; 
    @Column(name = "NOTE") private String note; 
    ... // A number of other fields 
} 

Jedes Feld hat Getter und Setter, wie die durch IntelliJ, verifiziert diese sind alle richtig. Auf meiner GUI kann der Benutzer Änderungen an einer Vereinbarung vornehmen und dann auf "Speichern" klicken. Jetzt muss mein Server das Update am Backend vornehmen. Ich bin mit Spring Repositorys und so habe ich:

@Repository 
public interface AgreementRepository extends CrudRepository<Agreement, String> {} 

Wenn der Benutzer die Vorlage I agreementRepository.save(agreement) aufrufen macht. Eines meiner Felder, rate, wird jedoch nicht am Back-End aktualisiert.

Ich habe den Code durchschritten und verifiziert, dass die rate Eigenschaft korrekt im agreement Objekt ist, das an save() übergeben wird. Außerdem habe ich die SQL gedruckt und überprüft, dass es tatsächlich auf dieser Ebene ist, dass das Problem auftritt, beachten Sie die save() Methode ruft eine SELECT gefolgt von UPDATE wie erwartet, da ich den gleichen Eintrag immer und immer wieder ändern Testen, aber ich kann klar in dem UPDATE Teil der Abfrage sehen, dass das rate Feld nicht festgelegt wird.

Odard noch, alle anderen Felder werden richtig eingestellt, unabhängig davon, ob ich auch RATE oder nicht einstellen. Alle anderen Änderungen verbreiten sich gut. Es ist nichts ungewöhnliches an diesem Feld RATE. Ich dachte, dass es vielleicht einen schlechten Auslöser oder etwas gab, das ein Entwickler vor mir eingefügt hatte, aber ich kann sehen, dass das von Spring erzeugte UPDATE es offensichtlich nicht setzt und verifiziert hat, dass keine solchen Trigger existieren.

Was ist der Grund, dass CrudRepository.save() eines meiner Felder ignorieren würde? Es ist nicht markiert @Transient und ist in keiner Weise ungewöhnlich. Wenn es nicht CrudRepository wo sonst sollte ich schauen, um zu sehen, warum dieses Feld nicht richtig eingestellt ist?

+0

Welche Datenbank verwenden Sie? Haben Sie überprüft, ob die Spalte "RATE" in der Datenbank vorhanden ist? – Kuchi

+0

Also die anderen Spalten sind aktualisiert und bewerten, nicht wahr? Hast du @transactional Annotation? – ZaoTaoBao

+0

RATE-Spalte existiert, ist ein 'VARCHAR (128)' (mehr als genug) und ist 'nullable'. Ich habe versucht, die aufrufende Methode als "@ Transactional" zu markieren und dies erreichte den gleichen Effekt. Aber ja, die anderen Spalten aktualisieren sich gut. – mike

Antwort

0

Hier ist der wirklich wilde Teil. Es scheint, dass mein Problem durch einen Neustart von IntelliJ gelöst wurde. Wirklich schwer zu verstehen, was schief gelaufen ist.

Ich begann mit der Umbenennung der Spalte in der DB zu etwas anderem, aber alle anderen Konfigurationen gleich bleiben. Ich stellte fest, dass keine Ausnahme ausgelöst wurde und versuchte herauszufinden, warum Spring Repository mich für falsch konfigurierte Entitäten anschreien sollte. Nach ein paar weiteren seltsamen Ereignissen dachte ich, es wäre das Beste, IntelliJ neu zu starten, nur für den Fall.

Plötzlich richtig aufgenommen die Spalte wurde nicht korrekt benannt. Ich habe die Spalte wieder so umbenannt, wie sie sein sollte und alles funktioniert wie erwartet. Wirklich bizarr.

Verwandte Themen