I have an entity: HtmlElement
with below @OneToOne
relationship with entity: Component
QueryParameter Entity:
@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 Entity:
@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;
Component Entity:
@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;
Type Entity:
@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;
Basically the relationship here means that one html element has one component related to it.
Now, when I want to find all components like below:
List<Component> componentList = componentRepo.findAllByOrderByComponentIdAsc();
It's giving me the following error: More than one row with the given identifier was found: 3
If I run the generated query it returns 3 rows, but that doesn't make any sense since Component has the different html components(input, select, etc) and HtmlElement is using the component Id and more information related to that, it is perfectly fine to re-use the same Component ID in different HtmlElements.
I tried cascading all and deleting orphan as suggested in here but didn't work, as well as the other suggestions in the same page.
Any idea on how to fix that please?