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

错误:找到具有给定标识符的多行-尽管表关系是1对1

钦楚青
2023-03-14

从关系设计的角度来看,我有一个名为Request的表,其中包含客户更改请求列表。每个客户请求将与RequestStatus表具有1对1的关系。

这意味着每个请求只有一种状态类型:挂起、已分配、已完成。因此,1对1的关系。

在我的pojo代码中,这是我的请求文件:

@Entity
@Audited
@Table(name = "requests")
@AuditTable("requests_audit")
public class Request extends Auditable<String> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotBlank
private String title;

@NotBlank
private String remarks;

private String fileName;

private String fileUrl;

private String fileType;

private Long creatorRefId;

private String requestStatusRef;

@OneToOne
@JoinColumn(name = "user_id", referencedColumnName = "id", nullable = true)
private User user;

@OneToOne
@JoinColumn(name = "status_id", referencedColumnName = "id", nullable = true)
private RequestStatus status;

@OneToOne
@JoinColumn(name = "department_id", referencedColumnName = "id", nullable = true)
private Department department;

@OneToOne
@JoinColumn(name = "assigned_user_id", referencedColumnName = "id", nullable = true)
private User assignedUser;

然后,这是我的RequestStatus文件:

@Entity
@Audited
@Table(name = "request_status")
@AuditTable("request_status_audit")
public class RequestStatus {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Enumerated(EnumType.STRING)
@Column(length = 100)
private EnumRequestStatus status;

public RequestStatus() {
}

public RequestStatus(EnumRequestStatus status) {
    this.status = status;
}

public Integer getId() {
    return id;
}

public void html" target="_blank">setId(Integer id) {
    this.id = id;
}

public EnumRequestStatus getStatus() {
    return status;
}

public void setStatus(EnumRequestStatus status) {
    this.status = status;
}

@OneToOne(mappedBy = "status")
private Request request;

}

从数据的角度来看,在Request表中,肯定会有重复RequestStatus的可能性,例如:

带有示例数据得请求表:

问题:听起来,从数据的角度来看,我应该有多对一的关系(从Request到RequestStatus),但是,这似乎不起作用。

对于这种单向关系,其中RequestStatus只是给定状态的“更多信息”,不应该有任何级联关系--只是一个引用。我认为这类案件的关系是怎样的?

那么,Request应该有@ManyToOne来RequestStatus?我是否应该将RequestStatus中的@OneToOne关系放回Request?

共有1个答案

狄冥夜
2023-03-14

这意味着每个请求只有一种状态类型:挂起、已分配、已完成。因此,1对1的关系。

这不是一对一。如果可以将相同的状态(例如pending)分配给多个请求,则表示一个request只有一个状态,但一个状态与多个请求相关联。因此,这是一个多对一的请求:

@ManyToOne
@JoinColumn(name = "status_id", referencedColumnName = "id", nullable = true)
private RequestStatus status;

如果这是一对一的,则不会多次使用相同的status_id,实际上可以对requestrequeststatus使用相同的id(这意味着不需要附加列status_id)。

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

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

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

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

  • 我有一个实体:与实体:之间的关系如下: QueryParameter实体: HtmlElement实体: 组件实体: 类型实体: 基本上,这里的关系意味着一个html元素有一个与其相关的组件。 现在,当我想要找到如下所示的所有组件时: 它给出了以下错误: 如果我运行生成的查询,它将返回3行,但这没有任何意义,因为Component有不同的html组件(input、select等),并且HtmlEl

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