java - hibernate.PersistentObjectException:分离的实体传递给持久化
问题描述
因此,当它具有相同类型的父级时,我在创建这个新的 MenuPortlet 时遇到问题。父级存在于数据库中,当我设置父级(mp)时它就在那里。
package com.kpsol.version6.model;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
@Entity
@Table(name = "MENU_PORTLET")
@NamedQuery(name = "menuPortlet.findAll", query = "SELECT t FROM MenuPortlet t")
public class MenuPortlet extends Portlet implements Serializable {
private static final long serialVersionUID = 1L;
@TableGenerator(name = "MenuPortlet", table = "NRD_ID", pkColumnName = "TABLENAME", valueColumnName = "NEXTID", pkColumnValue = "MENU_PORTLET", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "MenuPortlet")
@Column(name = "MENUPORTLETID")
private Long id;
@ManyToOne
@JoinColumn(name = "PARENTID")
MenuPortlet parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
@OrderBy("PORTLETORDER")
Set<MenuPortlet> children = new HashSet<MenuPortlet>();
@JoinColumn(name = "USERID")
private Long userId;
@Column(name = "ISUSER")
private Boolean isUser;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Long getUserId() {
return this.userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public MenuPortlet getParent() {
return this.parent;
}
public void setParent(MenuPortlet parent) {
this.parent = parent;
}
public Set<MenuPortlet> getChildren() {
return this.children;
}
public void setChildren(Set<MenuPortlet> children) {
this.children = children;
}
public Boolean getIsUser() {
return this.isUser;
}
public void setIsUser(Boolean isUser) {
this.isUser = isUser;
}
}
这就是我的父关系实体的方式。我已经为父母和孩子尝试了懒惰和渴望的负载,似乎都没有什么不同。
portlet.setParent(mp);
portlet = this.portletservice.create(portlet);
mp 是正确的 MenuPortlet,没有问题。
this.em.persist(portlet);
老实说,没有其他真正可以展示的东西。烦人的事情是我在其他几个地方做过类似的事情,没有问题,我已经将相同的代码复制到最后一部分,但它仍然不起作用。我错过了什么?
解决方案
推荐阅读
- javascript - 如何在 React-intl 日期格式中使用 '-' 而不是 '/'
- swiftui - SwiftUI:编译器无法在合理的时间内对该表达式进行类型检查
- laravel - Laravel Cashier Paddle - 试用天数错误
- security - 避免金融网站dos攻击的最推荐解决方案是什么?
- c++ - 如何将 protobuf 动态消息转换为 C++ 中声明的消息?
- python - django mongodb 使用 djongo 和 pymongo 连接
- maven - 在 spark 类路径中为 mmlspark 添加 jar
- c - 对 _imp__recv@16' 的未定义引用
- c++ - 标头中声明的函数可以在一个项目中的不同源文件中具有多个定义吗?
- java - Eclipse 在哪里管理工作区信息?