gpt4 book ai didi

java - @onetoone 找到了不止一行具有给定标识符的行

转载 作者:行者123 更新时间:2023-12-02 01:09:10 27 4
gpt4 key购买 nike

我有一个实体:HtmlElement,与实体有以下@OneToOne关系:Component

查询参数实体:

@Id
@Column(name = "QUERY_PARAMETER_ID")
private int queryParameterId;

@Column(name = "QUERY_PARAMETER")
private String queryParameter;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "QUERY_ID")
private Query Query;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "HTML_ELEMENT_ID")
private HtmlElement HtmlElement;

HtmlElement 实体:

@Id
@Column(name = "HTML_ELEMENT_ID")
private int htmlElementId;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "COMPONENT_ID")
private Component Component;

@Column(name = "HTML_ELEMENT_ID_NAME")
private String htmlElementIdName;

@Column(name = "HTML_ELEMENT_SHOWING_NAME")
private String htmlElementShowingName;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "TYPE_ID")
private Type Type;

@Column(name = "HTML_ELEMENT_MAXLENGTH")
private String htmlElementMaxlength;

@Column(name = "HTML_ELEMENT_PLACEHOLDER")
private String htmlElementPlaceholder;

@Column(name = "HTML_ELEMENT_HELPTEXT")
private String htmlElementHelptext;

@OneToOne(mappedBy = "HtmlElement")
private QueryParameter QueryParameter;

组件实体:

@Id
@Column(name = "COMPONENT_ID")
private int componentId;

private String component;

@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
schema = "APP_OWNER",
name = "_COMPONENT_TYPE",
joinColumns = { @JoinColumn(name = "COMPONENT_ID") },
inverseJoinColumns = { @JoinColumn(name = "TYPE_ID") }
)
@OrderBy("TYPE_NAME")
private Set<Type> Types = new HashSet<>();

@OneToOne(mappedBy = "Component")
private HtmlElement HtmlElement;

类型实体:

@Id
@Column(name = "TYPE_ID")
private int typeId;

@Column(name = "TYPE_NAME")
private String typeName;

@ManyToMany(mappedBy = "Types")
private Set<Component> Components = new HashSet<>();

@OneToOne(mappedBy = "Type")
private HtmlElement HtmlElement;

这里的关系基本上意味着一个 html 元素有一个与其相关的组件。

现在,当我想找到如下所示的所有组件时:

List<Component> componentList = componentRepo.findAllByOrderByComponentIdAsc();

它给了我以下错误:找到了多个具有给定标识符的行:3

如果我运行生成的查询,它会返回 3 行,但这没有任何意义,因为 Component 具有不同的 html 组件(输入、选择等),并且 HtmlElement 使用组件 ID 以及与之相关的更多信息,在不同的 HtmlElement 中重复使用相同的组件 ID 是完全可以的。

我尝试按照here中的建议级联所有并删除孤儿。但没有奏效,以及同一页面中的其他建议。

知道如何解决这个问题吗?

最佳答案

根据描述(“在不同的 HtmlElement 中重复使用相同的组件 ID 是完全可以的”),在不同的 HtmlElement 中使用相同的组件,因此关系应该是 ManyToOne 而不是 OneToOne。 HtmlElement 实体应如下所示:

@ManyToOne
@JoinColumn(name = "COMPONENT_ID")
private Component component;

PS:不要使用 cascade = CascadeType.ALL,因为如果一个 HTMLElement 删除了,则与其他 HTMLElement 链接的关联组件也将被删除。

关于java - @onetoone 找到了不止一行具有给定标识符的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59615555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com