@Entity
@Table(name = "NPRO_USUARIOS")
public class User implements Serializable {
private static final long serialVersionUID = -1330075515340995797L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="user_seq_gen")
@SequenceGenerator(name="user_seq_gen", sequenceName="TELCO_NPRO_USER_SEQ")
@NotNull
private int id_usuario;
@NotNull
private String nombre_usuario;
@ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.REMOVE, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_USUARIOS_SOCIEDADES_AREAS", joinColumns = @JoinColumn(name = "id_usuario"), inverseJoinColumns = @JoinColumn(name = "id_sociedad"))
private Set<Sociedad> listaSociedad;
@Transient
private String sociedades;
// Si el area es nula, el usuario estara asignado a todas las areas
@ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.REMOVE, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_USUARIOS_SOCIEDADES_AREAS", joinColumns = @JoinColumn(name = "id_usuario"), inverseJoinColumns = @JoinColumn(name = "id_area"))
private Set<Area> listAreas;
@Transient
private String areas;
@NotNull
private String matricula_usuario;
@NotNull
private String email_usuario;
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_PERFILES_USUARIOS", joinColumns = @JoinColumn(name = "id_usuario"), inverseJoinColumns = @JoinColumn(name = "id_rol"))
private Set<Role> listaRoles;
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_PERFILES_USUARIOS", joinColumns = @JoinColumn(name = "id_usuario"), inverseJoinColumns = @JoinColumn(name = "id_pantalla"))
private Set<Pantalla> listaPantallas;
private LocalDateTime fecha_ultimo_acceso;
private String observaciones;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "usuario_modif")
private User usuario_modif;
}
@Entity
@Table(name = "NPRO_MAESTRO_SOCIEDADES")
public class Sociedad implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NotNull
private int id_sociedad;
@NotNull
private String cod_sociedad;
@NotNull
private String cod_sociedad_gl;
@NotNull
private String nombre_sociedad;
@NotNull
private String cif_sociedad;
private String observaciones;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "usuario_modif")
private User usuario_modif;
private String activo;
@JsonIgnore
@ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.REMOVE, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_USUARIOS_SOCIEDADES_AREAS", joinColumns = @JoinColumn(name = "id_sociedad"), inverseJoinColumns = @JoinColumn(name = "id_usuario"))
private Set<User> listaUsuarios;
}
@Entity
@Table(name = "NPRO_MAESTRO_AREAS")
public class Area implements Serializable {
private static final long serialVersionUID = -1330075515340995797L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="area_seq_gen")
@SequenceGenerator(name="area_seq_gen", sequenceName="TELCO_NPRO_AREAS_SEQ")
@NotNull
private int id_area;
@NotNull
private String nombre_area;
private LocalDateTime fecha_modif;
private String observaciones;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "usuario_modif")
private User usuario_modif;
@NotNull
private String activo;
@ManyToOne
@JoinColumn(name="id_sociedad")
private Sociedad sociedad;
@JsonIgnore
@ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.REMOVE, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_USUARIOS_SOCIEDADES_AREAS", joinColumns = @JoinColumn(name = "id_area"), inverseJoinColumns = @JoinColumn(name = "id_usuario"))
private Set<User> listaUsuarios;
}
我正在使用springboot jpa存储库保存方法
@Override
public User save(User user) {
return userRepository.save(user);
}
这是完整的错误:2020-06-09 15:49:02.371[nio-8080-exec-4]。M.M.A.ExceptionHandlerExceptionResolver:由处理程序执行导致的解析异常:org.springframework.dao.invalidDataAccessapiusageException:传递给persistent的分离实体:com.telefonica.npro.model.area;嵌套异常是org.hibernate.persistentObjectException:传递给persist:com.telefonica.npro.model.area的分离实体
提前致谢
编辑:
我在http://knowledgespleasure.blogspot.com/2015/06/condernand-detached-entity-passs-to.html这一页上读到了关于eror的内容
我想我的问题是最后一个:
另一方面,如果requirement不是在DB中添加新的子级,则应删除cascadetype.persist,并使用cascade={cascadetype.merge,cascadetype.refresh}
用户总是与公司和地区相关联的,他们已经存在,他们不会是新的。但是,如果我删除PERSIST,在commun表npro_usuarios_sociedades_areazes中插入一个id null是很麻烦的
有人帮忙吗?
我将解释用户
和区域
实体之间的@manytomany
双向关系的问题。
>
双向@manytomany关联应该有一个owning和mappedby
端。CascadeType
应该只存在于此关联的一侧。
正如本文所解释的,您需要使双方同步,否则,您将破坏域模型关系的一致性,并且除非双方正确同步,否则不能保证实体状态转换工作。因此,User
实体定义了AddArea
和RemoveArea
实体状态同步方法。
因此,应该以以下方式更正用户区域@manytomany
映射:
@Entity
@Table(name = "NPRO_USUARIOS")
public class User implements Serializable {
// ...
@ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.REMOVE, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "NPRO_USUARIOS_SOCIEDADES_AREAS", joinColumns = @JoinColumn(name = "id_usuario"), inverseJoinColumns = @JoinColumn(name = "id_area"))
private Set<Area> listAreas;
public User()
{
listAreas = new HashSet<>();
}
public void addArea(Area area) {
listAreas.add(area);
area.getUsers().add(this);
}
public void removeArea(Area area) {
listAreas.remove(area);
area.getUsers().remove(this);
}
}
@Entity
@Table(name = "NPRO_MAESTRO_AREAS")
public class Area implements Serializable {
// ...
@JsonIgnore
@ManyToMany(mappedBy = "listAreas")
private Set<User> listaUsuarios;
}
然后可以通过以下方式保存一个新用户:
User user = new User();
// ...
Area area1 = new Area();
// ...
user.addArea(area1);
Area area2 = new Area();
// ...
user.addArea(area2);
userRepository.save(user);
应该对用户-社会关系进行类似的更正。
我在提交表单时遇到以下错误: org.hibernate.PersistentObjectException:传递给Persisted的分离实体:com.project.pmet.model.Account;嵌套异常为javax.persistence.persistenceException:org.hibernate.persistentObjectException:传递到persist的分
问题内容: 我已经成功用hibernate写了我的第一个主要的孩子例子。几天后,我再次使用它并升级了一些库。不知道我做了什么,但是我再也无法使它运行了。有人可以帮助我找出返回以下错误消息的代码中的错误吗: hibernate映射: 编辑: InvoiceManager.java 发票.java InvoiceItem.java 编辑: 从客户端发送的JSON对象: 编辑: 一些详细信息: 我试图通
这个网站上没有一个类似的问题能够解决我的问题。 错误:org.hibernate.persistentobjectexception:传递给persist:healthcheckapi.model.checks的分离实体 示例JSON健康对象: 请注意,这两个对象的ID都是自动生成的,我认为这是问题的一部分。
我有一段运行时间很长的JPA+Hibernate代码,它试图在一个循环中将大量记录插入到DB中。 更奇怪的是,我可以用下面的代码在一次迭代中重现错误。“分离的实体...”第二次刷新时引发错误。那么这是否意味着第一次同花顺是没有操作的呢?
我正试图实现与hibernate的许多单向关系。问题是,当我试图向数据库中添加一些值时,我遇到了以下错误: 运行时发生异常。null:InvocationTargetException:未能执行ApplicationRunner:传递给persist:dnd35cg的分离实体。模型DND类;嵌套的异常是org。冬眠PersistentObjectException:传递给persist:dnd35
问题内容: 提交表单时出现此错误: org.hibernate.PersistentObjectException:分离的实体传递给持久化:com.project.pmet.model.Account; 嵌套异常是javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:传递给持久对象的分离实体:c