2016-03-24 3 views
0

in der Ruhe Registrierung kann ich benutzerdefinierten SQL-fuctions durch das Konfigurationsobjekt registrieren:eine SQL-Funktion durch Entity ManagerFactory

public void registerExtensions(Configuration config) { 
    config.addSqlFunction("s_sum", new StandardSQLFunction("sum")); 
    ... 
} 

Ich mag diese Konfiguration wechseln von "Legacy" Hibernate JPA.

Ich habe gelesen, ich SQL-Funktionen durch den Dialekt spezialisiert Dort können: Registering a SQL function with JPA/Hibernate Dies ist nicht was Ich mag würde tun.

Gibt es eine Möglichkeit, diese Funktionen beim Erstellen des Entity Manager Factory zu registrieren?

Ich führe Hibernate 4.3 in einem Frühling 4.1 Kontext.

+0

Nun, Sie können nicht, weil JPA keinen solchen Mechanismus hat. Sie werden Ihren Code immer an eine Implementierung binden, indem Sie auf solchen Dingen bestehen. –

Antwort

0

JPA registriert SQL über die @NamedQueries und @NamedQuery Annotationen. Diese werden in derselben Klasse wie die Entität platziert. Siehe das Javadoc: Annotation Type NamedQuery.

@NamedQuery(
    name="findAllCustomersWithName", 
    query="SELECT c FROM Customer c WHERE c.name LIKE :custName" 
) 

und

@PersistenceContext 
public EntityManager em; 
... 
customers = em.createNamedQuery("findAllCustomersWithName") 
    .setParameter("custName", "Smith") 
    .getResultList(); 
+0

Ich fürchte, das ist nicht das, was ich brauche. Das Ziel ist, hql mit neuen Funktionen zu erweitern, wie hier erklärt http://stackoverflow.com/questions/4955580/hibernate-how-to-use-concat-and-group-concat – gregfqt

+0

Nun, der ursprüngliche Beitrag, den Sie verlinkt gesagt um die Dialektklasse zu erweitern. Hast du das versucht? Ich wäre interessiert, das Beispiel und/oder den Anwendungsfall zu kennen. –

+0

Ich möchte vermeiden, die Dialekte zu erweitern, weil meine App gegen mehrere RDBMS laufen kann. Ich müsste mehrere Dialekte mit meist demselben Code erweitern. – gregfqt

Verwandte Themen