【发布时间】:2017-10-06 12:28:05
【问题描述】:
我有一个像下面这样的模型:
@Entity(name = "request")
public class VisitRequest {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "visitRequest", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private List<Visitor> visitors;
//default constructor, getters and setters
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "class")
public class Visitor {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JsonBackReference
private VisitRequest visitRequest;
//default constructor, getters and setters
}
@Entity
public class ContactPerson extends Visitor {
private PhoneNumber phoneNumber;
//default constructor, getters and setters
}
但是当我尝试通过与联系人交换访问者之一来更新 visitRequest,并尝试在 CRUD 存储库上执行该方法时,visitRequestRepository.save(visitRequest);我遇到了这个异常:
Servlet.service() 用于 servlet [dispatcherServlet] 的上下文中的路径 [] 抛出异常 [请求处理失败;嵌套异常是 org.springframework.orm.ObjectRetrievalFailureException:对象 [id=null] 不属于指定的子类 [cern.ais.visits.core.domain.visitor.Visitor] :给定的类 对象与持久副本的类不匹配;嵌套异常是 org.hibernate.WrongClassException:对象 [id=null] 不是 指定子类 [cern.ais.visits.core.domain.visitor.Visitor] : 给定对象的类与持久副本的类不匹配] 根本原因
也许问题是在数据库中contact_person和visitor表中使用了相同的id?
我该如何解决这个问题?我已经搜索了解决方案,但没有一个对我有用。
【问题讨论】:
-
可能是 persistence.xml 文件中的访问者类的条目丢失或者这可能会有所帮助,stackoverflow.com/questions/31257027/…
-
我需要在persistence.xml中定义一个Visitor类吗?我这里使用的是注解配置,不是xml配置。
-
我也遇到了同样的问题,你解决了吗?
-
负载中的
class属性是什么?另外,@JsonSubtypes不见了 -
@tomwassing 提出自己的问题并提供minimal reproducible example,您将有更好的机会。