java - 我如何像在MySQL中那样在Spring Boot JPA中建立一对多关系?

标签 java mysql hibernate spring-boot spring-data-jpa

这是我的课

@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/

相关文章:

java - 下载maven中的存储库

java - 在maven中覆盖第三方jar的依赖

java - 在 Intent 中添加 2 个额外内容

mysql - 如何创建主键不是自动增量的 MySQL

mysql - #1054 - 'max.ACCESS_DATE_TIME' 中的未知列 'where clause'

java - 如何通过两个字段加入(CriteriaBuilder)

java - 使用 JPA 注释映射 java.util.Map 时,键和值列名称会被覆盖

java - 运行 Spring Boot 应用程序时出现 ClassNotFoundException

java - 我如何引用另一个类的对象

用于搜索的 MySQL 多索引与多列索引