【问题标题】:failed to lazily initialize a collection of role: <Relation Class>could not initialize proxy - no Session无法延迟初始化角色集合:<Relation Class>无法初始化代理 - 没有会话
【发布时间】:2020-03-18 03:20:42
【问题描述】:

我在使用新的子实体更新父实体时遇到异常,

这是我的示例表

public class NavigationNode implements Serializable,Auditable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "NodeID")
private Long id;

@Embedded
private AuditSection auditSection = new AuditSection();

@Column(name = "Code", nullable = false, unique = true)
private String navCode;

@Column(name = "NodeTitle")
private String title;

@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.PERSIST})
@JoinTable(name = "node2linkRel", joinColumns = { @JoinColumn(name = "NavigationNodeID") }, inverseJoinColumns = { @JoinColumn(name = "LinkID") })
private Collection<Link> links;

@ElementCollection
@OneToMany(fetch=FetchType.LAZY, orphanRemoval = true, cascade = {CascadeType.PERSIST} )
@JoinTable(name = "node2nodeRel", joinColumns = { @JoinColumn(name = "ParentID") }, inverseJoinColumns = { @JoinColumn(name = "ChildID") })
private Collection<NavigationNode> children;

@Column(name = "Visible")
private Boolean visible;

}

还有一个叫做 Link 的表

public class Link implements Serializable,Auditable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "LinkID")
private Long id;

@Embedded
private AuditSection auditSection = new AuditSection();

@Column(name = "LinkUrl")
private String url;

@Column(name = "linkName")
private String linkName;

@Column(name = "VisibleInMenu")
private Boolean visibleInMenu;

@ManyToOne(cascade = {CascadeType.PERSIST})
@JoinTable(name = "node2linkRel", joinColumns = { @JoinColumn(name = "LinkID") }, inverseJoinColumns = { @JoinColumn(name = "NavigationNodeID") })
private NavigationNode node;

}

在没有链接的情况下保存时出现上述错误。

延迟初始化角色集合失败:Navigation.links 无法初始化代理

我的要求是

  • 我可以创建带有可选子项和链接的 Navigaiton,使用可选子项和链接更新子项/父项。
  • 如果我删除导航节点,则应删除相关的子节点,但我只想保留链接并删除导航和链接之间的关系。
  • 如果我尝试删除 LINK 记录,则应该只删除 Navigation 和链接之间的关系。

我怎样才能做到这一点,这是正确的表配置。

此外,在删除链接或节点时,我遇到了另一个异常。

请提出建议。

谢谢

【问题讨论】:

  • 如果您提供完整的堆栈跟踪信息会很有帮助。
  • @ali4j 我发现了这个问题,这是因为我为关系集合属性分配了一个新对象,因此在对象已经存在时不允许分配新对象。

标签: mysql hibernate spring-data-jpa


【解决方案1】:

这是因为在从数据库中获取对象后,我试图将新的对象列表分配给导航表中的链接。

我试图打破链接和导航之间的关系。 为了实现这一点,我只需从导航表中的链接列表中删除链接并保存,这样这些实体之间的关系就会中断。

如果我尝试取消导航和链接之间的关系,我的要求是不要删除链接。

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 2018-11-21
    • 2014-12-23
    • 1970-01-01
    • 2022-07-08
    • 2016-07-06
    • 2015-07-02
    • 2018-02-25
    • 2017-01-30
    相关资源
    最近更新 更多