TLDR:我在我的项目中使用了 Spring-jpa
和 Hibernate
,我的问题只是在我试图获得一个在我使用 org.apache.commons.lang3.SerializationUtils.clone()
方法深度克隆的实体中定义为 Lazy
的对象列表。
我得到以下异常
Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java)
at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139)
at JSON_to_XML.main(JSON_to_XML.java:84)
在我尝试获取在 duplicateEvent
对象中定义为 lazy
的所有 users
列表之后
代码:
@Service
public class EventService {
@Autowired
EventRepository eventRepository;
public List<User> duplicateEvent(Long id) {
Event event = eventRepository.findById(id);
Event duplicateEvent = SerializationUtils.clone(event);
return duplicateEvent.getUsers();
}
}
事件实体:
@Entity
@Table(name="events")
public class Event implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Integer id;
@OneToMany(fetch= FetchType.LAZY, mappedBy="event")
privare List<User> users = new ArrayList();
public List<User> getUsers() {
return this.users;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Event() {
}
}
p.s : spring.jpa.hibernate.enable_lazy_load_no_trans=true
属性没有帮助
最佳答案
自己想出来的
而不是使用 org.apache.commons.lang3.SerializationUtils.clone()
进行深度复制
我用了Dozer Mapper对于深拷贝,也不异常(exception)了。
关于java - 使用序列化深度克隆后 hibernate 延迟加载异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47989554/