当前位置: 首页 > 知识库问答 >
问题:

@OneToOne找到多个具有给定标识符的行

拓拔泉
2023-03-14

我有一个实体:HTMLElement与实体:Component之间的关系如下:@OneToOne

QueryParameter实体:

@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组件(input、select等),并且HtmlElement使用组件Id和与此相关的更多信息,所以在不同的HtmlElement中重用相同的组件Id是完全好的。

我尝试了级联所有和删除孤儿的建议,但没有工作,以及其他建议在同一页。

有什么办法可以解决吗?

共有1个答案

戚飞雨
2023-03-14

按照描述(“在不同的HTMLElements中重复使用相同的组件ID是非常好的”),相同的组件在不同的HtmlElement中使用,所以关系应该是ManyToOne,而不是OneToOne。HtmlElement实体应如下所述:

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

ps:不要使用cascade=CascadeType.All,因为如果删除了一个HTMLElement,那么与其他HTMLElement链接的关联组件也会被删除。

 类似资料:
  • 我在使用spring数据从1对1关系btn表检索数据时遇到了一个问题。我已经回顾了平台上的几个解决方案,但奇怪的是,在问题首次出现之前,我已经实现了所有建议的解决方案。请帮助我找到我所缺少的东西,或是使对他人有用的解决方案对我无效的任何东西。 以下是这两个实体之间的关系 错误消息: 2021-12-23 15:02:42.116错误11144---[nio-8089-exec-5]o.a.c.c.

  • 我在我的spring boot应用程序中出现了这个错误。当我想调用这个存储库时,我遇到了这个错误 这是我的存储库: 这就是我称之为此方法的地方: 如何检查方法返回的结果?我调试了我的代码,但在断点它只是返回这个错误。 谢谢你的帮助。

  • 在eclipse中调试时 退回申请。isEmpty()?空:应用程序。得到(0); 这些表达式被计算为 applications.is空()- 应用。获取(0)- 应用。大小()- 但在执行这一行之后,它的抛出错误 组织。冬眠HibernateeException:找到了多个具有给定标识符的行:263536, 即使它的大小显示为1,那么它为什么以及如何在执行后获得多行。

  • 当我尝试使用findById()方法从数据库中获取单个记录时,或者当我尝试使用spring数据REST更新一篇文章时,我遇到了一个异常:找到了具有给定标识符的不止一行。 delete和findAll方法正常工作。 我已经检查了数据库,没有多个相同ID的记录。另外,id是数据库中的唯一键。我见过很多人有同样的错误,但这些人的问题是他们在哪里使用联接。我没有任何加入。 该实体: 存储库: 例外情况:

  • 当我尝试使用findById()方法从数据库中获取单个记录时,或者当我尝试使用spring数据REST更新一篇文章时,我遇到了一个异常:找到了具有给定标识符的不止一行。 delete和findAll方法正常工作。 我已经检查了数据库,没有多个相同ID的记录。另外,id是数据库中的唯一键。我见过很多人有同样的错误,但这些人的问题是他们在哪里使用联接。我没有任何加入。 该实体: 存储库: 例外情况:

  • 我正在开发EJB-JPA-JSF项目。但是我有一个问题。我得到这个查询的错误: 如何修复此错误