【发布时间】:2022-01-12 14:20:39
【问题描述】:
我有一个名为 User 的类,在这个类中它们以前具有以下属性:
@Entity(name = "User")
@Table(name = "user")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "username", unique = true)
private String username;
@Column(name = "password")
private String password;
private Integer victories;
private Integer defeats;
private Double victoryRatio;
}
但是,我现在需要区分不同的游戏类型,例如,有竞技游戏和非竞技游戏。
这意味着每次进行比赛或非比赛时,标准的胜利、失败和胜利比率都必须更新。但是,当玩比赛时,我还需要增加新的“比赛”变量,如下所示:
@Entity(name = "User")
@Table(name = "user")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "username", unique = true)
private String username;
@Column(name = "password")
private String password;
private Integer victories;
private Integer defeats;
private Double victoryRatio;
private Integer compVictories;
private Integer compDefeats;
private Double compVictoryRatio;
}
这会导致其他类(例如服务类)中出现大量代码重复。我想创建一个名为 UserStats 的新类:
public class UserStats {
private Integer victories;
private Integer defeats;
private Double victoryRatio;
}
然后在原来的User实体内拥有:
private UserStats userStats;
private UserStats compUserStats;
但不幸的是,这不起作用,IDEA 在上面的代码中以红色突出显示了“UserStats”。
我是否需要将 UserStats 创建为单独的实体,然后执行以下操作:
@OneToMany
private UserStats userStats;
@OneToMany
private UserStats compUserStats;
我不确定如何以最好的方式做到这一点,任何帮助将不胜感激,谢谢。
【问题讨论】:
-
您在这里使用
@OneToMany有什么原因吗?为什么单个用户会有许多不同的竞争胜率? -
他们不会,但他们会有许多不同的 UserStats,1 个用于竞技游戏,1 个用于非竞争游戏?
-
那么这不是带有 userStats 的
@OneToOne和带有 compuUserStats 的@OneToOne吗?它不能解决您的 UserStats 红色下划线 - 我建议您将 UserStats 创建为您所说的实体并导入 UserStats 来解决该问题。
标签: java spring spring-boot oop spring-mvc