gpt4 book ai didi

java - JPA 和序列化行为

转载 作者:行者123 更新时间:2023-12-02 06:55:26 26 4
gpt4 key购买 nike

基本上,我想让我的实体中的 JPA 持久字段的行为就像手动序列化时是 transient 的

我有一个像这样的基本类(class):

@Entity
public class Foo implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
long id;

String field;

get/set field;

}

序列化时,id 也会被序列化。当我反序列化此类并保留它时,它仍然具有相同的 ID,并且(与 JPA 合并后)是数据库中的相同实例。虽然这可能是预期的行为,但我希望反序列化的对象成为反序列化时数据库中的新对象。

我试图让 id 暂时存在,但这会弄乱 JPA。我尝试的第二件事是在反序列化后将 id 设置为 null。之后,坚持工作。但这对于许多不同的实体来说变得相当乏味,我回到了原来的问题。

还有比这更简单的方法吗?重写 readObject(...) 方法并将 id 设置为 null 也不起作用,因为 JPA 也使用这些方法。

最佳答案

当您想要一个新对象时,我建议将 id 清空。使它成为 transient 似乎是一个坏主意,如果您需要在某个时刻序列化真实对象怎么办?

如果您使用 EclipseLink,它还提供了一个 copy() API,可以克隆对象并清空 id,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Copy_Examples

关于java - JPA 和序列化行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com