2012-02-12 14 views
7

Ricordo che c'è un'annotazione in JPA o in ibernazione per dire alla ibernazione di usare il metodo getId/setId invece della proprietà (annotiamo le nostre proprietà). Senza questa impostazione si ottengono risultati positivi nel colpire il database e riempire tutti i campi di quell'oggetto che non è quello che voglio. Qualcuno sa cos'è questa annotazione?hibernate getId sta caricando l'oggetto anche se è pigro

Esempio:

public void Project { 
    @Id 
    //Other annotation forcing hibernate to use property get/settter 
    public Long id; 
} 

public Ticket { 
    @ManyToOne(lazy=true) 
    public Project project; 
} 

così, ticket.getProject.getId() determina che colpisce il database per ottenere il progetto quando l'ID è già in oggetto proxy progetto di sospensione. L'annotazione risolverà ciò che ricordo.

grazie, Dean

risposta

12

Dovete dire Hibernate per accedere al ID utilizzando l'accesso di proprietà piuttosto che l'accesso campo:

@Id 
@Access(AccessType.PROPERTY) 
private Long id; 

Davvero non dovrebbe fare i vostri campi pubblici.

+0

Link qui con qualche dettaglio in più; http://256.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml –

+0

scusa, ho usato il campo di gioco e ti ci fai abituare dopo un po '. Non mi piacciono i campi pubblici, ma dopo aver usato scala, vorrei che java avesse qualcosa del genere per ridurre la codifica. –

+0

sparare, questo genera un avviso per ogni classe in cui è attiva, in quanto le specifiche JPA affermano che l'annotazione deve essere eseguita con il metodo getId, ma spostarla lì produce solo un'eccezione e non funzionerà affatto. Come si fa a farlo correttamente in questi giorni ??? (Usavo questo sul campo ma potrebbe essere stato quello specifico di ibernazione) ... grazie. –

Problemi correlati