package com.xuqm.bugcollect.entity; import jakarta.persistence.*; import java.time.LocalDateTime; /** * 记录每个 Issue 影响的唯一用户,用于正确计算 affectedUsers(去重)。 * 通过联合主键 (issue_id, user_id) 保证唯一性。 */ @Entity @Table(name = "log_issue_users") @IdClass(LogIssueUserEntity.IssueUserId.class) public class LogIssueUserEntity { @Id @Column(nullable = false) private Long issueId; @Id @Column(nullable = false, length = 128) private String userId; @Column(nullable = false) private LocalDateTime firstSeenAt; public Long getIssueId() { return issueId; } public void setIssueId(Long issueId) { this.issueId = issueId; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public LocalDateTime getFirstSeenAt() { return firstSeenAt; } public void setFirstSeenAt(LocalDateTime firstSeenAt) { this.firstSeenAt = firstSeenAt; } public static class IssueUserId implements java.io.Serializable { private Long issueId; private String userId; public IssueUserId() {} public IssueUserId(Long issueId, String userId) { this.issueId = issueId; this.userId = userId; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof IssueUserId that)) return false; return java.util.Objects.equals(issueId, that.issueId) && java.util.Objects.equals(userId, that.userId); } @Override public int hashCode() { return java.util.Objects.hash(issueId, userId); } } }