2009-06-01 4 views
4

J'utilise une convention de préfixation des noms de champs avec un trait de soulignement. Lorsque je génère des classes d'entités annotées avec de tels champs, je suis bloqué pour utiliser les noms de propriété underscore-prefixed dans les requêtes. Je veux éviter cela, et être en mesure de le faire:Modification des noms de propriétés dans les requêtes JPA

@Entity 
public class Container { 

    private String _value; 
} 

// in a lookup method 
executeQuery("from Container where value = ?", value); 

Est-ce possible avec JPA en général ou Hibernate en particulier?


Mise à jour: essayant toujours de se rappeler pourquoi, mais je dois ce à annoter sur les champs plutôt que sur getters.

Répondre

4

Vous pouvez annoter le getter:

@Entity 
public class Container { 

    private String _value; 

    @Column 
    public String getValue() 
    { 
     return _value; 
    } 

    public void setValue(String value) 
    { 
     this._value = value; 
    } 

} 
+0

Probablement pas une option si la classe est générée, cependant. – skaffman

1

Vous pourriez peut-être écrire des sous-classes de vos classes d'entités générées, qui ont des méthodes getter, puis configurer le gestionnaire d'entités pour utiliser l'accès getter/setter à la place si l'accès au champ? Alors vos getters/setters pourraient avoir n'importe quel nom que vous avez aimé.

0

Jetez un oeil à NamingStrategy. Il serait assez facile d'étendre le DefaultNamingStrategy et de surcharger la méthode columnName pour enlever le premier trait de soulignement (s'il y en a).

+0

Êtes-vous sûr que cela concerne les noms de propriétés et non les noms de colonne de base de données? Le javadoc indique qu'il s'agit d'un ensemble de règles permettant de déterminer les noms de colonnes et de tables physiques en fonction des informations contenues dans le document de mappage. –

+0

Hmm, vous avez raison. Hibernate ne traite que la propriété (ou le champ) du mappage de la base de données. Il n'y a pas d'autre nom que vous pouvez utiliser. Cette solution vous donnera des noms propres dans la base de données, mais vos noms de propriété (dans les requêtes HQL ou Criteria) auront toujours le trait de soulignement. Je pense que vous ne pouvez utiliser l'autre suggestion et utiliser le getter pour cela. –

Questions connexes