JPA - @JoinColumn @ManyToOne 到 Class 由 PkClass 组成

JPA - @JoinColumn @ManyToOne to Class composed by PkClass

我正在尝试实施国际化 class 来翻译数据库中的内容。

我有这些 table:

我有论文 classes:

产品型号:

public class ProductModel implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idproduct_model")
private Integer idproductModel;

@Size(max = 80, message = "El campo nombre esta vacio")
@Column(name = "name")
private String name;

@Size(max = 45, message = "El campo referencia esta vacio")
@Column(name = "productSuppReference")
private String productSuppReference;

    ...

语言:

public class LanguageCountry implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_language")
private Integer idLanguage;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "description")
private String description;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "languageCountry1")
private List<ProductModelI18n> productModelI18nList;

 ...

ProductModelI18n:

public class ProductModelI18n implements Serializable {

private static final long serialVersionUID = 1L;
@EmbeddedId
protected ProductModelI18nPK productModelI18nPK;

@Size(max = 80)
@Column(name = "name")
private String name;

@Lob
@Size(max = 2147483647)
@Column(name = "description")
private String description;

@Size(max = 800)
@Column(name = "description2")
private String description2;

@JoinColumn(name = "language_country", referencedColumnName = "id_language", insertable = false, updatable = false)
@ManyToOne(optional = false)
private LanguageCountry languageCountry1;

ProductModelI18nPK:

@Embeddable
public class ProductModelI18nPK implements Serializable {

@Basic(optional = false)
@NotNull
@Column(name = "product_model")
private int productModel;

@Basic(optional = false)
@NotNull
@Column(name = "language_country")
private int languageCountry;

我有问题,因为我需要 ProductModelI18n 中的双 PK table 来获得 productmodel 和 languageCountry 之间的多对多关系,现在我不知道如何在 productModel 中进行连接 table .

我需要一个 ArrayList/Map 的 ProductModel class。

提前致谢!

何塞

编辑:

抱歉,我错过了您在 Join table 中有额外列的事实,因此只需要分解 ProductModelLanguageCountry 之间的 ManyToMany 关联分为两个 OneToMany 协会。

您的代码应如下所示:

ProductModelclass:

@OneToMany
private List<ProductModelI18n> ProductLanguages;

LanguageCountry class:

@OneToMany
private List<ProductModelI18n> ProductLanguages;

并且在您的 ProductModelI18n class:

保留所有其他字段,包括 IdPK 并添加以下声明。

@ManyToOne
@PrimaryKeyJoinColumn(name="productModel", referencedColumnName="idproductModel")
private ProductModel productModels ;
@ManyToOne
@PrimaryKeyJoinColumn(name="languageCountry", referencedColumnName="idLanguage")
private LanguageCountry LanguageCountries;

注:

确保包含所有的 getter 和 setter。


无需创建 class ProductModelI18n 即可在 productmodellanguageCountry 之间建立 ManyToMany 关系。

你只需要在这两个 class 中用 @ManyToMany 注释映射两个 Collections ,在两侧的其中一个你定义一个 @JoinTable 这是你的代码需要:

ProductModel class:

@ManyToMany
@JoinTable(
  name="ProductModelI18n",
  joinColumns={@JoinColumn(name="productModel", referencedColumnName="idproductModel")},
  inverseJoinColumns={@JoinColumn(name="languageCountry", referencedColumnName="idLanguage")})
private List<LanguageCountry> languageCountries;

在你的 LanguageCountry class:

@ManyToMany(mappedBy="languageCountries")
private List<ProductModel> productModels;

您将在两个 table 之间得到一个连接 table,如图所示。

有关更多信息,您可以查看: