org.hibernate.MappingException:外键()必须与引用的主键()具有相同的列数

时间:2017-10-12 14:29:47

标签: java mysql hibernate

我知道这个主题在很多时候都会讨论过,但我仍然遇到异常:外键必须与引用的主键具有相同的列数。 我正在使用Hibernate通过xml文件进行映射:

public class Product implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer idProduct;
private String titleProduct;
private String reference;
private String description;
private boolean deuxiemeMain;
private double prixUnitaire;
private double prixNegocier;
private boolean valider;
private Integer qteMinOrdred;
private String echantillonGratuit;
private Customer costumer;
private SubCategory subCategory;
private Order order;
private ProductType productType;
private Unity unity;
private byte[] image;
private Collection<Double> prices;
private Collection<Integer> quantities;
private Collection<String> keyWords;

public Product() {
    // TODO Auto-generated constructor stub
}

public Integer getIdProduct() {
    return idProduct;
}

public String getTitleProduct() {
    return titleProduct;
}

public String getReference() {
    return reference;
}

public String getDescription() {
    return description;
}

public boolean isDeuxiemeMain() {
    return deuxiemeMain;
}

public double getPrixUnitaire() {
    return prixUnitaire;
}

public double getPrixNegocier() {
    return prixNegocier;
}

public boolean isValider() {
    return valider;
}

public Integer getQteMinOrdred() {
    return qteMinOrdred;
}

public String getEchantillonGratuit() {
    return echantillonGratuit;
}

public void setIdProduct(Integer idProduct) {
    this.idProduct = idProduct;
}

public void setTitleProduct(String titleProduct) {
    this.titleProduct = titleProduct;
}

public void setReference(String reference) {
    this.reference = reference;
}

public void setDescription(String description) {
    this.description = description;
}

public void setDeuxiemeMain(boolean deuxiemeMain) {
    this.deuxiemeMain = deuxiemeMain;
}

public void setPrixUnitaire(double prixUnitaire) {
    this.prixUnitaire = prixUnitaire;
}

public void setPrixNegocier(double prixNegocier) {
    this.prixNegocier = prixNegocier;
}

public void setValider(boolean valider) {
    this.valider = valider;
}

public void setQteMinOrdred(Integer qteMinOrdred) {
    this.qteMinOrdred = qteMinOrdred;
}

public void setEchantillonGratuit(String echantillonGratuit) {
    this.echantillonGratuit = echantillonGratuit;
}

public Customer getCostumer() {
    return costumer;
}

public void setCostumer(Customer costumer) {
    this.costumer = costumer;
}

public ProductType getProductType() {
    return productType;
}

public void setProductType(ProductType productType) {
    this.productType = productType;
}

public Collection<String> getKeyWords() {
    return keyWords;
}

public void setKeyWords(Collection<String> keyWords) {
    this.keyWords = keyWords;
}

public Unity getUnity() {
    return unity;
}

public void setUnity(Unity unity) {
    this.unity = unity;
}

public SubCategory getSubCategory() {
    return subCategory;
}

public void setSubCategory(SubCategory subCategory) {
    this.subCategory = subCategory;
}

public Order getOrder() {
    return order;
}

public void setOrder(Order order) {
    this.order = order;
}

public byte[] getImage() {
    return image;
}

public void setImage(byte[] image) {
    this.image = image;
}

public Collection<Double> getPrices() {
    return prices;
}

public Collection<Integer> getQuantities() {
    return quantities;
}

public void setPrices(Collection<Double> prices) {
    this.prices = prices;
}

public void setQuantities(Collection<Integer> quantities) {
    this.quantities = quantities;
}

}

产品类的我的映射文件是:

<hibernate-mapping>
    <class name="modele.Product" table="PRODUCT">
        <id name="idProduct" type="java.lang.Integer">
            <column name="IDPRODUCT" />
            <generator class="increment" />
        </id>
        <property name="titleProduct" type="java.lang.String">
            <column name="TITLEPRODUCT" />
        </property>
        <property name="reference" type="java.lang.String">
            <column name="REFERENCE" />
        </property>
        <property name="description" type="java.lang.String">
            <column name="DESCRIPTION" />
        </property>
        <property name="deuxiemeMain" type="boolean">
            <column name="DEUXIEMEMAIN" />
        </property>
        <property name="prixUnitaire" type="double">
            <column name="PRIXUNITAIRE" />
        </property>
        <property name="prixNegocier" type="double">
            <column name="PRIXNEGOCIER" />
        </property>
        <property name="valider" type="boolean">
            <column name="VALIDER" />
        </property>
        <property name="qteMinOrdred" type="java.lang.Integer">
            <column name="QTEMINORDRED" />
        </property>
        <property name="echantillonGratuit" type="java.lang.String">
            <column name="ECHANTILLONGRATUIT" />
        </property>
        <many-to-one name="costumer" class="modele.Customer"
            fetch="join">
            <column name="COSTUMER" />
        </many-to-one>
        <many-to-one name="subCategory" class="modele.SubCategory"
            fetch="join">
            <column name="SUBCATEGORY" />
        </many-to-one>
        <many-to-one name="order" class="modele.Order" fetch="join">
            <column name="ORDER" />
        </many-to-one>
        <many-to-one name="productType" class="modele.ProductType"
            fetch="join">
            <column name="PRODUCTTYPE" />
        </many-to-one>
        <many-to-one name="unity" class="modele.Unity" fetch="join">
            <column name="UNITY" />
        </many-to-one>
        <primitive-array name="image" table="PRODUCT">
            <key>
                <column name="IDPRODUCT" />
            </key>
            <index></index>
            <element type="byte">
                <column name="IMAGE" />
            </element>
        </primitive-array>
        <bag name="prices" table="PRODUCT" inverse="false" lazy="true">
            <key>
                <column name="IDPRODUCT" />
            </key>
            <element type="java.lang.Double">
                <column name="PRICES" />
            </element>
        </bag>
        <bag name="quantities" table="PRODUCT" inverse="false" lazy="true">
            <key>
                <column name="IDPRODUCT" />
            </key>
            <element type="java.lang.Integer">
                <column name="QUANTITIES" />
            </element>
        </bag>
        <bag name="keyWords" table="PRODUCT" inverse="false" lazy="true">
            <key>
                <column name="IDPRODUCT" />
            </key>
            <element type="java.lang.String">
                <column name="KEYWORDS" />
            </element>
        </bag>
    </class>
</hibernate-mapping>

我为此构造获得以下异常:

org.hibernate.MappingException:外键(FK185958CF30AA9EB1:PRODUCT [IDPRODUCT]))必须与引用的主键具有相同的列数(PRODUCT [IDPRODUCT,idx])     org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:90)     org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:73)     org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1263)     org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1170)     org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)     persistence.BaseDAO。(BaseDAO.java:21)     persistence.BaseDAO.getInstance(BaseDAO.java:42)     dao.SearchDAO.getListeProducts(SearchDAO.java:23)     metier.SearchManager.getProduct(SearchManager.java:13)     presentation.SearchProduct.doGet(SearchProduct.java:40)     javax.servlet.http.HttpServlet.service(HttpServlet.java:624)     javax.servlet.http.HttpServlet.service(HttpServlet.java:731)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

0 个答案:

没有答案