87 votes

Comment faire une entité en lecture seule?

Quelle est la bonne façon de rendre une entité en lecture seule avec JPA? Je souhaite que ma table de base de données ne soit jamais modifiée du tout par programme.

Je pense comprendre que je devrais verrouiller mes objets avec LockModeType.READ . Est-il possible d'utiliser une annotation pour verrouiller directement mes entités après l'extraction de la base de données? Ou dois-je perdre mon temps et remplacer mon DAO générique pour cette entité spécifique?

52voto

Nicolas Points 11558

Une solution consiste à utiliser des annotations basées sur les champs, à déclarer vos champs comme protected et à ne proposer que le getter public. Ce faisant, vos objets ne peuvent pas être modifiés.

(Cette solution n'est pas spécifique à une entité, c'est juste un moyen de construire des objets immuables)

40voto

red tiger Points 377

Hibernate possède également une annotation org.hibernate.annotations.Immutable que vous pouvez insérer dans le type, la méthode ou le champ.

25voto

Andrew B Points 540

Si votre implémentation JPA est en veille prolongée, vous pouvez utiliser l'annotation hibernate Entity.

 @org.hibernate.annotations.Entity(mutable = false)
 

Évidemment, cela va cependant lier votre modèle à l'hibernation.

15voto

Mac Points 8532

IIRC vous pouvez définir chaque champ sur insertable = false et updatable = false dans vos annotations @Column , mais je suis sûr qu'il doit y avoir une meilleure méthode ... :)

Je suppose que ça aide?

13voto

DaTroop Points 2006

Je pense que ce que vous recherchez, c'est que votre entité soit immuable. Hibernate soutient cela; JPA (au moins JPA 1.0) ne le fait pas. Je suppose que vous ne pouvez contrôler cela qu'en fournissant uniquement des accesseurs et en vous assurant que ces derniers ne renvoient que des valeurs immuables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X