下記の質問に関連します。
特定のパッケージやjarに対してのみ公開する可視性設定は可能か?

DDDにおける集約は、その内部状態(集約に含まれるエンティティやEnum型フィールド等)は公開せず、ユースケース上必要となるメソッドのみを外部に公開します。
しかし、永続化層ではその内部状態を調べてデータベースのテーブルにマッピングしなければなりません。
永続化のために全ての内部状態をpublicメソッドで公開するのは避けたいので、何らかの制約のもとで内部状態を取得する仕組みを求めています。

目標とする隠蔽のレベルですが、最低限、「うっかり呼んでしまった」を防げれば良いと考えています。
publicメソッドになっていると、その集約オブジェクトの設計(どのpublicメソッドが“真の”publicなのか)に関する知識が無ければ、「うっかり」呼んでしまいますが、何か特別な手続きを踏む必要性を取り入れれば、「うっかり」は防げます。

この条件下では、どのようなクラス設計が良いでしょうか。
何か応用可能なデザインパターンなどありませんか?