【问题标题】:Hibernate Error Invalid Column Name休眠错误无效的列名
【发布时间】:2016-01-20 04:46:36
【问题描述】:

我正在尝试在 hibernate 和 spring 中建立一对多和多对一的关系。

下面是我的产品类代码

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="Product")
public class Product implements Serializable{

    @Id
    @Column(name="productId")
    @GeneratedValue
    private Integer productId;

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

    @Column(name="productPrice")
    private int productPrice;


    //---------------------------------------item mapped to category------------------------------------------//
    @ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(
            name="CategoryProduct",
            joinColumns= @JoinColumn(name="productId")
    )
    private Category category;
    //--------------------------------------------------------------------------------------------------------//



    public Integer getProductId() {
        return productId;
    }

    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public int getProductPrice() {
        return productPrice;
    }

    public void setProductPrice(int productPrice) {
        this.productPrice = productPrice;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }




}

下面是我的分类代码

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import java.io.Serializable;
@Entity
@Table(name="Category")
public class Category implements Serializable{

    @Id
    @Column(name="categoryId")
    @GeneratedValue
    private Integer categoryId;

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

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinTable(
            name="CategoryProduct",
            joinColumns = @JoinColumn(name="categoryId"),
            inverseJoinColumns = @JoinColumn(name="productId")
    )
    public Set<Product> product;


    public Integer getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }

    public String getCategoryName() {
        return categoryName;
    }

    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    public Set<Product> getProduct() {
        return product;
    }

    public void setProduct(Set<Product> product) {
        this.product = product;
    }

}

每当我运行代码时,我都会收到 Invalid column name 'category_categoryId'。

我的表结构 产品具有 productId、poductName 和 productPrice 列 类别的列为 categoryId、categoryName categoryproducts 有 categoryId 和 productId 列

【问题讨论】:

    标签: spring hibernate


    【解决方案1】:

    您忘记将inverseJoinColumns 放在产品类的@JoinTable 中。这会导致休眠使用他们的 joinTable 约定,即&lt;ClassName&gt;_&lt;columnName&gt;。改成

    @JoinTable(
        name="CategoryProduct",
        joinColumns = @JoinColumn(name="productId"),
        inverseJoinColumns = @JoinColumn(name="categoryId")
    )
    private Category category;
    

    但是,从您的设计来看,您实际上是在产品和类别之间创建 2 个单向关联。如果你想创建双向关联,我建议你改变 One side (Category),使用 mappedBy

    @OneToMany(mappedBy="category", cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    public Set<Product> product;
    

    它通常会达到相同的结果。希望对您有所帮助!

    【讨论】:

    • 谢谢,该解决方案对我有用。由于我是 Hibernate 的新手,我将审查设计并考虑您的想法。
    猜你喜欢
    • 2018-06-13
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多