gpt4 book ai didi

java - Spring JPA - 具有两个主键的实体

转载 作者:行者123 更新时间:2023-12-05 04:05:13 25 4
gpt4 key购买 nike

LabelTextLanguage这3张表:

@Entity
public class Label {

@Id
@GeneratedValue
private Long id;

@ManyToOne
@JoinColumn(name = "text_id")
private Text text;

}

然后发短信:

@Entity
public class Text {

@Id
@GeneratedValue
private Long id;

@Column(name = "text", columnDefinition = "TEXT")
private String text;

@OneToMany(mappedBy = "text")
private List<Label> labels;

@ManyToOne
@JoinColumn(name = "language_id")
private Language language;

}

最后:

@Entity
public class Language {

@Id
@GeneratedValue
private Long id;

@Column(name = "code")
private String code;

@OneToMany(mappedBy = "language")
private List<Text> texts;

}

Text 实体中最好的方法是什么?两个键 text_idlanguage_id 一起应该是唯一的,例如 Text 表看起来像这样:

text_id     language_id     text
------------------------------------
1 1 Example
1 2 Beispiel

然后在 LabelRepository 中,我将能够定义我想要文本的语言?

最佳答案

您可以在这里找到两个解决方案:How to create and handle composite primary key in JPA

  • 第一个基于@Embeddable 类。
  • 第二个基于 @IdClass 类。

@IdClass解决方案总结:

1- 创建一个“关键”类

public class LabelRepositoryKey implements Serializable {
private Long textId;
private Long languageId;
}

2- 然后,在您的实体中使用这个“键”类

@Entity @IdClass(LabelRepositoryKey.class)
public class LabelRepository {
@Id
private Long textId;
@Id
private Long languageId;
@Column(name = "text")
private String text;
}

关于java - Spring JPA - 具有两个主键的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51423268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com