2009-10-01 1 views
1

Compte tenu de cette Hibernate snippetsur la création chaîne pour les requêtes en veille prolongée et si ces requêtes réduiraient la création d'objets si elles étaient static

@org.hibernate.annotations.NamedQueries({ 
    @org.hibernate.annotations.NamedQuery(
     name = "ASSIGNED_CONTINGENCIES", 
     query = "select ctg.id from Cont ctg join ctg.labels cl where cl.id = :label_id and ctg.datasetId = tscommon.rdsidtodsid(:datasetting_id)...." 
    ) 
}) 

Est-ce que cela signifie que chaque fois que j'exécute cela, est la chaîne « requête » étant créé à chaque fois ou est-ce un cas d'internement de chaîne? Serait-il bénéfique d'avoir une requête dans un final static String QUERY et ensuite l'utiliser dans le @NamedQuery? Est-ce que le même serait aussi valable pour "nom" alors?

Répondre

1

La chaîne est un littéral chaîne, elle sera donc toujours internée lorsque la classe est chargée.

+0

+1. En mettant l'accent sur "la classe est chargée" plutôt que "requête est exécutée" comme OP mentionné. – ChssPly76

+0

Donc devinez que j'avais raison c'est un cas d'internement et il n'y a aucune raison de l'assigner à une finale statique, merci. –

1

Il n'y a aucun avantage de performance ou de la mémoire, mais il pourrait être utile d'utiliser des constantes pour les noms de requête pour éviter les erreurs typographiques, comme dans cet exemple:

// Entity class 
@NamedQueries({@NamedQuery(name=MyBean.FIND_BY_ID, query="select o from MyBean o where o.id = :id")}) 
public class MyBean { 
    public static final String FIND_BY_ID = "MyBean.findById"; 
} 

// Controller/Service/Factory/whatever 
em.createNamedQuery(MyBean.FIND_BY_ID).setParameter("id", id).getSingleResult(); 
+0

Cela semble plutôt exagéré, pour être honnête. Si vous tapez un nom de requête erroné, une exception sera levée lorsque vous tenterez de le charger. – ChssPly76

+0

Je préfère une erreur de compilation à une exception RuntimeException à tout moment. Cela facilite également le refactorisation des noms de requêtes et la recherche d'utilisations/requêtes inutilisées dans un IDE. –

Questions connexes