Ich versuche Java's Hibernate @ Filter in einem viele zu eins Beziehungsfeld zu verwenden, aber wenn ich den Filter aktiviere und versuche, eine getAll-Methode mit dem StockDailyRecord Service von einem AJAX I aufzurufen erhalten diese:Hibernate @Filter entity von @ManyToOne Feld
HTTP Status 500 - Request processing failed;
nested exception is javax.persistence.PersistenceException:
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
das ist mein Wesen ist, wo ich den Filter definieren:
@Entity
@Table(name = "stock_daily_record", catalog = "mkyong")
@FilterDef(name="stockDailyRecordFilter")
@Filters({
@Filter(name="stockDailyRecordFilter", condition="stock.name = 'My stock'"),
})
public class StockDailyRecord extends Entity implements Serializable {
...
@ManyToOne
@JoinColumn(name = "stock_id", referencedColumnName = "id", nullable = false)
public Stock getStock() {
return this.stock;
}
}
aber wenn ich den Filter mit der aktuellen Spalte in der Datenbank „stock_id“ ändern und vergleichen sie es mit der ID I Der Filter funktioniert ohne Ausnahmen.
@Filter(name="stockDailyRecordFilter", condition="stock_id = 10")
Hier ist, wie ich den Filter in der StockDailyRecordService aktivieren:
Session hSession = getSession();
if (isAnonymous) {
hSession.enableFilter("stockDailyRecordFilter");
} else {
hSession.disableFilter("stockDailyRecordFilter");
}
Auch wenn ich den Filter auf andere Eigenschaften versuchen (sagen die StockDailyRecord Feld "description" hat) es funktioniert gut. Gibt es eine Möglichkeit, aus der Filterbedingung auf die Eigenschaft "name" der Entität Stock zuzugreifen, weil ich den Ansatz eigentlich nicht mit der "stock_id = 10" machen möchte?
Nach dem Versuch, das ich zu verbinden: „org.postgresql.util.PSQLException: ERROR: Spalte stock_daily_records0_.name existiert nicht“. – Blaskowitz
Hibernate hier sieht "name" als "stock_daily_records" Spalte, aber es ist eigentlich eine "Lager" -Tabelle Spalte – Blaskowitz
Aktualisierte Antwort mit einem anderen Ansatz – StanislavL