当前位置: 首页 > 知识库问答 >
问题:

Hibernate错误列名无效

司马高昂
2023-03-14
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;
    }

}

我的表的结构Product的列为productId,poductName和productPrice类别的列为categoryId,categoryName和categoryproducts的列为categoryId和productId

共有1个答案

范俊逸
2023-03-14

您忘记将inversejoincolumns放在@jointable in Product类中。这导致hibernate使用它们的可联合约定,即 _ 。将其更改为

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

然而,从你的设计来看,你实际上是在产品和类别之间建立了2个单向的关联。如果您想创建双向关联,我建议您更改一侧(类别),使用mappedBy

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

它一般会达到同样的结果。希望有帮助!

 类似资料:
  • 我对命名查询有问题,但我不明白为什么它不工作。 我是这样定义查询的: 在这里我使用它: 错误:由:组织引起。冬眠HibernateException:命名查询中的错误:getUserRatings

  • 我有两张桌子。CategoryMaster和PotentialProject 我想加入项目类型和类别ID。 Hibernate中的错误消息是无效的列名typeOfProject。请给我一些建议。谢谢你。

  • 我有两个表:人员和帐户(一对多关系)。 这不是我第一次使用一对多关系,但我以前没有遇到过这个错误。 完整的StackTrace:

  • 我有两张桌子。CategoryMaster和PotentialProject 我想加入typeOfProject和CategoryID。 hibernate中的错误消息是无效的列名TypeOfProject。请给我一些建议。谢谢你。

  • 问题内容: 我在我的两个实体类User和Permission之间定义了多对多关系。用户具有用户名和countyId的主键组合,而我的Permission表具有正则整数ID。表UserPermission具有三个外键作为其主键:用户名,县名和权限ID。 由于这是一个旧数据库,因此我将没有机会进行Right Thing(™)并在User上创建一个整数主键。 我在User.class中定义了这样的多对多