2011-02-22 8 views
2

J'ai une classe qui contient un certain nombre de champs, et tous sont annotés par propriété. Pour l'un de ces champs, cependant, je veux présenter un double à la base de données et une date à l'utilisateur.Comment remplacer AccessType sur un seul champ

J'ai essayé un nombre quelconque de combinaisons ici, mais hbm2ddl (et donc, hibernate) continue de traiter la propriété dwell comme un horodatage. Comment dois-je l'implémenter sinon via des annotations similaires à ce que j'ai ci-dessous (c'est une version simplifiée de la classe en question)? Je considérerais déplacer toutes les annotations aux champs, mais la classe qui a besoin de ceci se trouve au sommet d'une hiérarchie d'héritage impliquant 25 autres classes et beaucoup, beaucoup d'annotations. Il faudrait la plus grande partie d'une journée pour déplacer toutes les annotations et cela semble être une façon inélégante de gérer cela.

@Entity 
@AccessType("property") 
public class Test { 

    private long id; 
    private Double dwell; 

    @Id 
    @Column(name = "ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @NotNull 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @AccessType("field") 
    @Column(name = "DWELL_ID", precision = 10, scale = 3) 
    public Date getDwell() { 
     return new Date(); 
    } 

    public void setDwell(Double dwell) { 
     this.dwell = dwell; 
    } 

} 

Répondre

3

Cela semble un peu étrange. Je ne suis pas sûr que changer le type d'accès fonctionnera réellement pour vous.

Vous violez la convention javabeans, ce qui est risqué. Ne le faites pas - laissez les getters et setters être purement getters et setters, sans extras cachés comme construire des objets.

Je voudrais juste écrire une autre méthode - getDwellAsDate() et y faire la conversion. Vous pouvez également définir un hibernation personnalisé Type pour gérer cela (mais ça ne vaut pas la peine)

+0

Je n'avais pas vraiment pensé à la norme de haricot. On dirait que la meilleure façon de le faire est avec un accesseur alternatif. Merci. – Bret

Questions connexes