2016-10-12 2 views
0

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?

Antwort

1

Versuchen Sie, die stock von Filterdefinition

@Filter(name="stockDailyRecordFilter", condition="name = 'My stock'") 

UPDATE So Lager hier bezieht Tabelle nicht die Haupttabelle zu entfernen. Sie können versuchen, mit IN Unterauswahl

condition="stock_id in (select id from stock where name = 'My stock')" 
+0

Nach dem Versuch, das ich zu verbinden: „org.postgresql.util.PSQLException: ERROR: Spalte stock_daily_records0_.name existiert nicht“. – Blaskowitz

+0

Hibernate hier sieht "name" als "stock_daily_records" Spalte, aber es ist eigentlich eine "Lager" -Tabelle Spalte – Blaskowitz

+0

Aktualisierte Antwort mit einem anderen Ansatz – StanislavL

Verwandte Themen