Ich habe eine Entität namens Product
. Es hat mehrere Felder und Benutzer kann ein oder mehrere Felder davon beliebig aktualisieren. Für die Aktualisierung Product
s, ich weiß, ich beibehaltenen Produkt von DB erhalten und aktualisieren es Felder und save
es wieder, aber diese Ursache wirkliche Leistungseinbuße. Der bessere Weg ist das Erstellen von benutzerdefinierten Update-Abfragen in ProductRepostory
Schnittstelle, aber in diesem Fall sollte ich mehrere Update-Funktionen für jedes Szenario schreiben. Ich möchte eine Map<String,Object>
Aktualisierung von Feldern und deren Werte erhalten und eine Abfrage schreiben, um das Thema proportional zu aktualisieren.Komplexe und schnelle Aktualisierung im Frühjahr Daten JPA
ich hörte, dass Hibernate Fähigkeit, benutzerdefinierte Update-Abfrage zu erstellen hat, und führen Sie wie Code unter
@Stateless
@LocalBean
public class OrderManagement {
@PersistenceContext
private EntityManager em;
...
public void updateOrder(Double oldAmount, Double newAmount) {
CriteriaBuilder cb = this.em.getCriteriaBuilder();
// create update
CriteriaUpdate<Order> update = cb.
createCriteriaUpdate(Order.class);
// set the root class
Root e = update.from(Order.class);
// set update and where clause
update.set("amount", newAmount);
update.where(cb.greaterThanOrEqualTo(e.get("amount"), oldAmount));
// perform update
this.em.createQuery(update).executeUpdate();
}
}
Aber ich frage mich, wie diese Daten im Frühjahr JPA Umständen zu verwenden, die größte Frage ist, wie EntityManager zu bekommen Instanz, und nächste ist, wo ist der am besten geeignete Ort, um diese Funktionalität zu setzen? ProductRepostory
Schnittstelle oder einige benutzerdefinierte Schnittstelle, Und wenn Antwort benutzerdefinierte Schnittstelle ist, wie man es registriert?
https://dzone.com/articles/add-custom-funktionality-to-a-spring-data-reposito Sie können das benutzerdefinierte Repository in Spring Data in dem obigen Link finden. –
Auch Entity Manager kann so injiziert werden. '@PersistenceContext EntityManager EntityManager;' –
1. Sie nicht brauchen, um es wieder zu sparen: Hibernate für Sie tut das. 2. Nein, dies verursacht keine wirklichen Leistungseinbußen. Das Lesen einer Zeile in einer Tabelle anhand ihrer ID ist extrem schnell. Sie optimieren vorzeitig, was die Wurzel allen Übels ist. Ihr Code wird viel komplexer und weniger sicher für einen imaginären Leistungsgewinn. –