作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个实体: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/
我是一名优秀的程序员,十分优秀!