重命名列后在save()处休眠休眠未知列

时间:2019-07-16 20:35:58

标签: java hibernate

我在表useless_id中有列foo。此列foreign key在其他表中。

我已经这样映射了它

@Entity
@Table(name = "foo")
public class Foo{

    @Column(name = "useless_id")
    private Integer uselessId;

    //...

}

一切正常。但是我决定将列useless_id的名称更改为useful_id

之后出现问题。当我尝试保存Foo对象时:session.save(new Foo(...))我得到Unknown column F.useless_id in 'where clause'

查询在控制台insert into foo (..., useful_id, ...) value (...)中打印

在列列表中,我看不到useless_id

为什么我得到Unknow column useless_id in 'where clause'?为什么在where时使用insert

到处都改变了。即使在Foo object

仅当尝试进行save时,才会出现此错误。

UPDATE(Foo class is Order Classuseful_idcustomer_id):

@Entity
@Table(name = "orders")
public class Order{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "status")
    private Integer status;

    @Column(name = "customer_id")
    private Integer customerId;

    @Column(name = "shipping_address")
    private String shippingAddress;

    //setters getters

}

@Entity
@Table(name = "customers")
public class Customer{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

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

    //setters getters

}

这是我尝试插入新对象的方式

//...
session.beginTransaction();

Order order = new Order();
//set random values. customer_id get valid value, it exists in customers

session.save(order);
session.getTransaction().commit();
session.close();

对于DESCRIBE orders;命令,我得到:

Field----------------Type-----------Null---Key---Default---Extra    
id-------------------int(11)--------NO-----PRI---NULL------auto_increment
status---------------int(50)--------NO-----------NULL------
customer_id----------int(50)--------NO-----MUL---NULL------
shipping_address-----varchar(191)---NO-----------NULL------ 

2 个答案:

答案 0 :(得分:1)

我发现了问题。

它来自MySQL。我通过尝试使用SQL命令直接插入MySQL来找到它。同样的错误。

因此,我在db中仔细查看,发现问题出在触发器上。在触发器之一中,仍使用列的旧名称。

现在有意义:Unknow column useless_id in 'where clause'where clause处于触发状态,试图找到useless_id,但它不再存在。

结论:更改列名后,检查触发器。

答案 1 :(得分:-3)

在您的Java类中,您将列名从 useless_id 更改为 userful_id ,但同样认为您并未更改数据库结构,因此您会看到此错误。