这是我的课
@Entity
@Table(name = "player", catalog = "leaderboard")
public class Player {
@Id
@Column(name = "player")
private String player;
@Column(name = "claim")
private Integer claim;
@Column(name = "fraud_score")
private Double fraudScore;
@Column(name = "fraud_value")
private String fraudValue;
@Column(name = "expected_claim")
private Double expectedClaimCost;
@Column(name = "expected_rpa")
private Double expectedRpaCost;
@Column(name = "accident_date")
private String accidentDate;
@Column(name = "submission_time")
private LocalTime submissionTime;
@OneToMany
@JoinColumn(name = "claim", referencedColumnName = "claim", insertable = false, updatable = false)
private ExpectedClaim expectedClaim;
// removed getters and setters for brevity
和
@Entity
@Table(name = "expected_claim", catalog = "leaderboard")
public class ExpectedClaim {
@Id
@Column(name = "claim")
private Integer claim;
@Column(name = "fraud_score")
private Double fraudScore;
@Column(name = "fraud_value")
private String fraudValue;
@Column(name = "expected_claim")
private Double expectedClaim;
@Column(name = "expected_rpa")
private Double expectedRpa;
// removed getters and setters for brevity
现在我们在MYSQL中有一个外键概念
其中表格Expected_claim和player与“ claim”列具有父子关系。
所以我刚开始使用Spring JPA
并试图了解一对多,多对一,多对多和一对一的工作原理,但无法获得我想要的东西,或者您可以说无法理解它们的实际实现方式。
我尝试在此处使用“一对多”将Player(子级)连接到ExpectedClaim(父级)。
但是我不明白的是,在MYSQL中,您只需要输入如下数据
insert into player values("Abc",1234,98,"Not Fraud",2500,2700,"31/12/2019","12:00:00")
如果Expect_claim表中存在任何Claim(第二列),则将插入记录,否则将不会插入。
但在这儿,
我看了很多关于这些关系的视频,但无法了解我们如何在这里做到这一点?
每次创建播放器时,我都必须创建一个Expected_claim对象吗?
最佳答案
您几乎明白了,这是您必须修复的仅有两件事。
如果我对您的理解正确,那么您希望某个声明具有多个玩家,而一个玩家具有单个声明。
1)将@ManyToOne
注释添加到您对玩家的预期要求中
@Entity
@Table(name = "player", catalog = "leaderboard")
public class Player {
@Id
@Column(name = "player")
private String player;
@Column(name = "claim")
private Integer claim;
@Column(name = "fraud_score")
private Double fraudScore;
@Column(name = "fraud_value")
private String fraudValue;
@Column(name = "expected_claim")
private Double expectedClaimCost;
@Column(name = "expected_rpa")
private Double expectedRpaCost;
@Column(name = "accident_date")
private String accidentDate;
@Column(name = "submission_time")
private LocalTime submissionTime;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "claim", referencedColumnName = "claim", insertable = false, updatable = false)
private ExpectedClaim expectedClaim;
}
2)在您的预期声明中添加
@OneToMany
批注。@Entity
@Table(name = "expected_claim", catalog = "leaderboard")
public class ExpectedClaim {
@Id
@Column(name = "claim")
private Integer claim;
@Column(name = "fraud_score")
private Double fraudScore;
@Column(name = "fraud_value")
private String fraudValue;
@Column(name = "expected_claim")
private Double expectedClaim;
@Column(name = "expected_rpa")
private Double expectedRpa;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "expectedClaim")
private Collection<Player> players;
// removed getters and setters for brevity
}
在这种情况下,Player将是您提到的
Player(child)
关系的所有者,并将在其表中包含其引用的列。
关于java - 我如何像在MySQL中那样在Spring Boot JPA中建立一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57732385/