我正在使用 Spring Boot 構建 API。它是一個懲罰系統的 API。在資料庫中有兩個用于規則的表,它們是規則表和社區表。

規則 Id 是一個整數,而社區 Id 是來自社區表的外鍵。預計一個社區有 0、1 或許多規則,而規則恰好是由一個社區制定的。
這是我希望在 Spring Boot 應用程式中復制的行為。
到目前為止,我有以下代碼:
社區.java
@Entity // Maps to database
public class Community {
@Id
@Column(name = "id", length = 16, unique = true, nullable = false)
private UUID id;
@Column(name = "username", length = 20, nullable = false)
private String name;
規則.java
@Entity // Maps to database
public class Rule {
@EmbeddedId
private RuleId ruleId;
@Column(name = "description", length = 50, nullable = false)
private String description;
規則ID.java
@Embeddable
public class RuleId implements Serializable {
private UUID communityId;
private Integer ruleId;
public RuleId(UUID communityId, Integer ruleId) {
this.communityId = communityId;
this.ruleId = ruleId;
}
我已經閱讀了堆疊上的一些執行緒,這是我從中獲得嵌入想法的地方,但我仍然對如何讓它與我的場景一起作業感到困惑。非常感謝任何幫助,以消除這種混亂。
干杯:)
uj5u.com熱心網友回復:
您可以使用注釋@JoinColumn(...)并指定關系,在您的情況下:@OneToOne(...)
然后您可以簡單地將您的Rule物體定義為僅Long id或int id和為:
@Entity
public class Rule {
@Id // map as id field
@GeneratedValue(strategy = GenerationType.AUTO) // Auto generate id when update db
@Column(name = "Rule_Id") // map the column field
private Long ruleId;
// Simply add annotation to map foreign key
@OneToOne
@JoinColumn(name = "community_id_fk", referencedColumnName = "community_id")
private Community community;
// more field ...
@Column(name = "description", length = 50, nullable = false)
private String description;
}
有關更多指南,您可以查看https://www.baeldung.com/jpa-one-to-one
uj5u.com熱心網友回復:
我通過從 Zukaru 的回答中采用一對一的關系解決了這個問題。
我想要的是一個由community_id和組成的復合鍵rule_id。Community Id 是Communities表上主鍵的外鍵。
為了實作這一點,我有 2 個類。Rule和RulePrimaryData。
規則.java
@Entity // Maps to database
@Table(name = "rules")
@Data
@NoArgsConstructor
public class Rule {
@EmbeddedId
private RulePrimaryData id;
@OneToOne
@JoinColumn(name = "community_id_fk", referencedColumnName = "community_id", insertable = false, updatable = false)
private Community communities;
@Column(name = "description", length = 50, nullable = false)
private String description;
public Rule(RulePrimaryData ruleId, String description) {
this.id = ruleId;
this.description = description;
}
}
嵌入的 Id 用于制作包含 UUID 和整數的組合鍵。
RulePrimaryData.java
@Embeddable
@NoArgsConstructor
@Data //Getters, setters, constructors
public class RulePrimaryData implements Serializable {
@Column(name = "community_id_fk", nullable = false)
private UUID communityId;
@Column(name = "rule_id", nullable = false)
private Integer ruleId;
public RulePrimaryData(UUID communityId, int ruleId) {
this.communityId = communityId;
this.ruleId = ruleId;
}
}
最后,這種關系是一對一的,我最初認為是多對一的。在定義中,我community_id_fk將 EmbeddedId 中的community_id列加入到 Communities 表中的列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/398988.html
