基本的に、エンティティ内の JPA 永続フィールドを、手動シリアル化で一時的であるように動作させたい
私はこのような基本的なクラスを持っています:
@Entity
public class Foo implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
long id;
String field;
get/set field;
}
シリアル化では、ID もシリアル化されます。このクラスをデシリアライズして永続化すると、同じ ID が保持され、(JPA とのマージ後) データベース内の同じインスタンスになります。これはおそらく意図した動作ですが、逆シリアル化されたオブジェクトを、逆シリアル化のデータベース内の新しいオブジェクトにしたいと考えています。
IDを一時的にしようとしましたが、これはJPAを台無しにします。私が試した 2 番目のことは、逆シリアル化後に ID を null に設定することでした。その後、永続化が機能します。しかし、これは多くの異なるエンティティでかなり退屈になり、元の質問に戻ります。
それよりも簡単な方法はありますか?JPAもこれらのメソッドを使用するため、メソッドをオーバーライドしreadObject(...)
てidをnullに設定しても機能しません。