java JPA和序列化行为
基本上,我想让实体中的JPA持久化字段在手动序列化时表现为瞬态
我有一个这样的基本课程:
@Entity
public class Foo implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
long id;
String field;
get/set field;
}
在序列化时,id也被序列化。当我反序列化这个类并将其持久化时,它仍然具有相同的ID,并且(与JPA合并后)在数据库中是相同的实例。虽然这可能是预期的行为,但我希望反序列化对象在反序列化时成为数据库中的新对象
我试图让身份证暂时生效,但这把JPA搞砸了。我尝试的第二件事是在反序列化后将id设置为null。在那之后,坚持有效。但对于许多不同的实体来说,这变得相当乏味,我回到了我最初的问题
有比这更简单的方法吗?重写readObject(...)
方法并将id设置为null也不起作用,因为JPA也使用这些方法
# 1 楼答案
当你想要一个新的对象时,我建议你将id置零。让它暂时化似乎不是个好主意,如果你需要在某个时刻序列化真实的对象呢
如果您使用的是EclipseLink,它还提供了一个copy()API,可以克隆一个对象并将id设为空
http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Copy_Examples