【问题标题】:Missing column error in Hibernate?Hibernate 中缺少列错误?
【发布时间】:2015-05-02 16:20:37
【问题描述】:

我在 Hibernate 中出现丢失列错误。整个错误是这样的,org.hibernate.HibernateException: Missing column: enquiry_type_enquiry_type_id in vaccum.enquiry。这是我的代码。

package com.beans;

import java.sql.Timestamp;

import javax.management.loading.PrivateClassLoader;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;


@Entity
@Table(name="enquiry")
public class Enquiry {


    @Id@GeneratedValue
    @Column(name="enquiry_id")
    int enquiry_id;

    @Column(name="text")
    String text;

    @Column(name="location")
    String location;

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

    @Column(name="mobile")
    String mobile;


    @Column(name="date_time")
    Timestamp date_time;


    /////////////////////


    @ManyToOne(cascade = CascadeType.ALL)
    private Enquiry_Type enquiry_type;

    public Enquiry_Type getEnquiry_type() {
        return enquiry_type;
    }

    public void setEnquiry_type(Enquiry_Type enquiry_type) {
        this.enquiry_type = enquiry_type;
    }


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

    public Enquiry(String text,String location,String name,String mobile,Timestamp date_time) {

        this.text    = text;
        this.location = location;
        this.name = name;
        this.mobile = mobile;
        this.date_time = date_time;
    }

    public int getEnquiry_id() {
        return enquiry_id;
    }

    public void setEnquiry_id(int enquiry_id) {
        this.enquiry_id = enquiry_id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public Timestamp getDate_time() {
        return date_time;
    }

    public void setDate_time(Timestamp date_time) {
        this.date_time = date_time;
    }

}

Enquiry_Type.java 在这里,

package com.beans;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="enquiry_type")
public class Enquiry_Type {

    @Id@GeneratedValue
    @Column(name="enquiry_type_id")
    int enquiry_id;

    @Column(name="enquiry_type")
    String enquiry_type;

    public Enquiry_Type() {

    }

    public Enquiry_Type(String enquiry_type) {

        this.enquiry_type    = enquiry_type;

    }

    public String getEnquiry_type() {
        return enquiry_type;
    }

    public void setEnquiry_type(String enquiry_type) {
        this.enquiry_type = enquiry_type;
    }



}

我收到来自SessionFactory factory=cfg.buildSessionFactory(); 的错误。该代码如下所示,

//creating configuration object
Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml");//populates the data of the configuration file

//creating seession factory object
SessionFactory factory=cfg.buildSessionFactory();
//creating session object
Session session=factory.openSession();

//creating transaction object
Transaction t=session.beginTransaction();

表 1:查询


enquiry_id |正文 |位置 |姓名 |移动 |类型 |日期时间 |

表 2:查询类型


enquiry_type_id |查询类型 |

这里,Enquiry.type = Enquiry_Type.enquiry_type_id

【问题讨论】:

  • 嘿,您错过了 enquiry_type 字段的@column 名称注释。可能是因为这个
  • 是的,因为是外键约束。所以,我试图在@ManyToOne(cascade = CascadeType.ALL) 注释上写这个字段,但它表明在这个关系上你不能应用它。 @war_Hero
  • 是的,这是正确的,但如果你不写@column 名称注释,那么永远不会在数据库中创建该字段

标签: java hibernate hibernate-mapping hibernate-criteria


【解决方案1】:

如何生成数据库架构?如果您使用 hibernate 来执行此操作,则应将 hibernate.hbm2ddl.auto 属性的值更改为“create”或“create-drop”。

【讨论】:

  • 我使用了“验证”。 @over9k
  • 通过使用“create”或“create-drop”,它每次都将整个表创建为新的。所以,这不是我想要的解决方案。因为,我想要数据库中以前的数据。是的,它在 table-1 中将字段名称“type”更改为“enquiry_type_enquiry_type_id”,它具有外键。 @over9k
【解决方案2】:

您能否交叉检查一下“enquiry”表中是否有一个名为“enquiry_type_enquiry_type_id”的列。

您必须确保表中存在的所有列都应该存在于实体类中

【讨论】:

  • 你能把你的表结构也添加到问题中
  • 这就是问题所在 :) 。您已将表注释为“@Table(name="enquiry_type") ”。因此您的类应该具有 Enquiry_Type 表中的列。即,Enquiry_Type 和 enquiry_type_id 应该存在于您的 Enquiry_Type 类中。试试看
  • 我已经更新了我的答案,并展示了另一个具有 Enquiry_Type 和 enquiry_type_id 的类。 @托马斯
  • 没有。很多事情我已经申请但没有解决。 @托马斯
【解决方案3】:

首先确定您的要求,如果您想通过级联属性将父元素与其新的 OneToMany 子元素一起插入,请使用以下一个。

@OneToMany(cascade = CascadeType.ALL)
private Enquiry_Type enquiry_type;

注解@JoinColumn 表示该实体是关系的所有者,即对应的表有一个列,该列具有引用表的外键)

@ManyToOne
@JoinColumn(name = "enquiryTypeID")
private Enquiry_Type enquiry_type;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2015-10-01
    相关资源
    最近更新 更多