我正在尝试删除hibernate中的子实体,但遇到以下异常:
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.epic.ecommerce.core.model.Customer#newnameTest]
at org.hibernate.internal.SessionImpl.forceFlush(SessionImpl.java:1236)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:676)
at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:235)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)...
这些是我的实体:
@Entity
@table(name=“Customer”)公共类Customer{
@Id
@Column(name="customer_id")
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign",parameters=@Parameter(name="property", value="user"))
private String id;
@OneTomany(Cascade=CascadeType.All,MappedBy=“CustomerID”,OphanRemoval=True)私有集QuoteConfig;
public Set<QuoteConfiguration> getQuoteConfigs() {
return quoteConfigs;
}
public void setQuoteConfigs(Set<QuoteConfiguration> quoteConfigs) {
this.quoteConfigs = quoteConfigs;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@OneToOne
@PrimaryKeyJoinColumn
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Entity
@Table(name="quote_configuration")
public class QuoteConfiguration implements java.io.Serializable{
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "quote_id",unique = true, nullable = false)
private Integer quoteId;
@Column(name = "base_product", nullable = false)
private String baseProduct;
@Column(name = "quote_name")
private String quoteName;
/*
@Column(name = "customer_customer_id")
private String customerId;
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
*/
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "customer_customer_id")
private Customer customerId;
public Customer getCustomerId() {
return customerId;
}
public void setCustomerId(Customer customerId) {
this.customerId = customerId;
}
这是我想要移除的部分
Session session = this.sessionFactory.getCurrentSession();
Query q = session.createQuery("from QuoteConfiguration where quoteId = :quoteId ");
q.setParameter("quoteId", quoteId);
QuoteConfiguration quote = (QuoteConfiguration)q.list().get(0);
Query qc=session.createQuery("from Customer where id=:id");
qc.setParameter("id", quote.getCustomerId().getId());
Customer customer=(Customer)qc.list().get(0);
customer.getQuoteConfigs().remove(quote);
session.delete(quote);
session.save(customer);
我的问题是如何删除子实体QuoteConfiguration,而不在Customer中获得关联异常。谢谢
只需从代码中删除会话.delete(quote)
。
您的@OneTomany
集合是记录的主机,并且已经将其设置为删除孤立元素。因此,当您执行customer.getQuoteConfigs().remove(quote)
时,它已经告诉Hibernate从数据库中删除记录。
需要注意的是,您应该尝试session.get(class,id)
而不是使用HQL来获取单个实例。
您不需要save(customer)
,因为Hibernate始终跟踪持久化实例。它们将在事务关闭时自动保存(除非您的会话设置为手动,这不应该)。
问题内容: 我有以下两个实体: 1-播放列表: *保存或更新播放列表实体时,需要使用 *CascadeType.ALL 来保存和更新PlaylistadMap集合。 orphanRemoval = true :在删除播放列表实体时需要,PlaylistadMap引用也应删除。 2- PlaylistadMap: 使用我删除播放列表时,出现以下异常: 请告知如何解决此异常。 问题答案: 将 Fetc
问题内容: 我收到上述错误“ org.hibernate.ObjectDeletedException:被删除的对象将通过级联重新保存(从关联中删除已删除的对象):”。有人可以帮我这个问题是什么,应该怎么解决? 谢谢。 问题答案: 没有映射结束代码会有点困难…这通常是由于要删除与集合关联的对象引起的。 您必须从拥有的收藏夹中删除对象,然后再删除对象 但是您可以通过这种方式使用deleteOrpha
问题内容: 我对级联=“删除”的工作方式感到困惑。我在“城市”映射文件中以以下方式定义了映射: 类客户具有类城市的外键。 因此,当我运行时: 是否还应该删除所有客户端,还是必须以某种方式处理它?我是否将查询作为方法参数正确传递给会话的delete()方法?谢谢你的帮助。最好的问候,混蛋。 问题答案: 我对cascade =“ delete”的工作方式有些困惑(…) 级联操作意味着,如果您是父母,则
问题内容: 我在我的数据库3个表:,和 学生可以有多个课程,课程可以有多个学生。和之间存在多对多关系。 我为我的项目和课程添加了3个案例。 (a)当我添加用户时,它会保存得很好, (b)当我为学生添加课程时,它会在-预期行为中创建新的行。 (三)当我试图删除学生,则在删除适当的记录和,但它也删除其中不需要的记录。即使课程中没有任何用户,我也希望课程在那里。 下面是我的表和注释类的代码。 这是Hib
问题内容: 我一直在搞怪它并使用它搜索了大约4天,我对Hibernate注释如何与JPA注释一起工作感到疯狂。我有两个非常简单的实体: 学生 电话 我将整个代码粘贴到这里,以便您可以看到导入的来源。我认为问题就在那里。 重要提示 :我使用的是Hibernate Docs建议的 好!现在,我创建了一个包含两个电话号码的,并将其正确保存在数据库中。这将创建以下内容: 学生 学生电话 电话 问题来了。如
我试图通过联接表的一个外键级联删除联接表中的行,它有另一个与之相关的表,我也想删除与此ID相关的所有行。看起来像下图。当我使用会话时。使用hibernate删除(reqCandObject)它工作正常,并通过从候选jobReq表中删除一个条目以及相关注释进行级联。但是,我想删除所有具有特定候选ID的候选项(并删除注释)。我尝试了下面的函数,但与nice hibernate不同。删除(对象)函数,此