In realtà si dovrebbe avere sia un costruttore senza argomenti e metodi getter e setter. I requisiti sono indicati nella sezione 2.1 di spec.
Il requisito costruttore no-arg si trova a pagina 17 nella mia copia:
classe
L'entità deve avere un costruttore no-arg. La classe di entità può avere anche altri costruttori. Il costruttore no-arg deve essere pubblico o protetto .
pagina 18 ha la necessità di metodi di accesso:
Lo stato persistente di un'entità è rappresentata da variabili di istanza, che possono corrispondere a java- fagioli proprietà. Una variabile di istanza può accessibile direttamente solo da i metodi dell'entità dall'istanza dell'entità stessa. Le variabili dell'istanza non devono essere accessibili dai client dell'entità. Lo stato di l'entità è disponibile per i client solo tramite i metodi di accesso dell'entità (metodi getter/setter) o altri metodi commerciali. Le variabili dell'istanza devono essere private, protette, o visibilità del pacchetto.
L'accesso Campo/Proprietà indica come il provider JPA interagisce con l'entità, non come l'applicazione client interagisce con esso. Il client dovrebbe sempre usare i metodi get e set.
Alcuni provider JPA sono più indulgenti in questi requisiti e si può essere in grado di rendere privato il costruttore (come suggerito sopra) con un fornitore specifico. L'applicazione potrebbe non essere portabile, quindi potresti essere sorpreso se effettui la migrazione in futuro.
Quindi non consiglierei di omettere completamente i metodi. Per risolvere il problema, contrassegno il public no-arg ctor come deprecato (metti qualcosa in javadoc sul fatto che sia usato solo dal provider JPA). I metodi impostati possono contenere la logica che si desidera mantenere invarianti.
Non è l'ideale ma dovrebbe impedire l'utilizzo errato del ctor errato (presumo che tu abbia un ctor che imposta gli invarianti).
può anche essere protetto, invece di pubblico –