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 中有额外列的事实,因此只需要分解 ProductModel
和 LanguageCountry
之间的 ManyToMany
关联分为两个 OneToMany
协会。
您的代码应如下所示:
在ProductModel
class:
@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
即可在 productmodel
和 languageCountry
之间建立 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,如图所示。
有关更多信息,您可以查看:
我正在尝试实施国际化 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 中有额外列的事实,因此只需要分解 ProductModel
和 LanguageCountry
之间的 ManyToMany
关联分为两个 OneToMany
协会。
您的代码应如下所示:
在ProductModel
class:
@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
即可在 productmodel
和 languageCountry
之间建立 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,如图所示。
有关更多信息,您可以查看: