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

时间:2015-07-03 09:58:01

标签: java jpa one-to-many jointable

我试图实现国际化类来翻译数据库中的内容。

我有这些表格:

database mapping

我有这些课程:

产品型号:

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来获得productmodel和languageCountry之间的多种关系,现在我不知道如何在productModel中创建连接表。

我需要ProductModel类中的ArrayList / Map。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

修改

很抱歉我的错误我错过了您在加入表中有额外列的事实,因此只需要将ManyToManyProductModel之间的LanguageCountry关联分解为两个{{1}关联。

您的代码应如下所示:

OneToMany课程中的

ProductModel

@OneToMany private List<ProductModelI18n> ProductLanguages; 课程:

LanguageCountry

在您的ProductModelI18n课程中:

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

@OneToMany
private List<ProductModelI18n> ProductLanguages;

注意:

确保包含所有getter和setter。

无需创建课程@ManyToOne @PrimaryKeyJoinColumn(name="productModel", referencedColumnName="idproductModel") private ProductModel productModels ; @ManyToOne @PrimaryKeyJoinColumn(name="languageCountry", referencedColumnName="idLanguage") private LanguageCountry LanguageCountries; 即可在ProductModelI18nManyToMany之间建立productmodel关系。

在这两个使用languageCountry注释映射的类中,您只需要两个Collections,您可以在这两个方面之一中定义@ManyToMany这里所需的代码:< / p>

@JoinTable课程:

ProductModel

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

LanguageCountry

如图所示,您将在两个表之间获得一个Join表。

有关详细信息,请查看: