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?
Welche Datenbank verwenden Sie? Haben Sie überprüft, ob die Spalte "RATE" in der Datenbank vorhanden ist? – Kuchi
Also die anderen Spalten sind aktualisiert und bewerten, nicht wahr? Hast du @transactional Annotation? – ZaoTaoBao
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