エンティティを作成するときに、データベースのカラムにない値をプロパティを持たせるためにはtransientという修飾子が必要です。
参考リンク フィールド以外のプロパティをエンティティに持たせる
通常のCDIでもserializeをする場合、内部のメソッドにSerializeインターフェイスが実装されていないとエラーが発生します。
例として下記のようなマネッジドビーンがあり、ロガーのクラスをインジェクトしているとします。
SampleBean.java
1 2 3 4 5 6 7 8 |
@Named @ViewScoped public class SampleBean implements Serializable{ /** * ロガー */ @Inject LogUtil logUtil; |
LogUtil.java
1 2 3 4 5 6 7 |
@Dependent public class LogUtil { public void Log(String dispValue, Object value) { Logger.getLogger(this.getClass().getName()).log(Level.INFO, dispValue, value); } } |
上記のケースではLogUtilがシリアライズができないためエラーが発生します。
この場合、シリアライズから除外するという意味で、transient修飾子を付けます。
1 2 3 4 5 6 7 8 |
@Named @ViewScoped public class SampleBean implements Serializable{ /** * ロガー */ @Inject transient LogUtil logUtil; |
↑のようにかけばOKです。
のP334にこのことについて書いてあります。