我在表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 Class
和useful_id
是customer_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------
答案 0 :(得分:1)
我发现了问题。
它来自MySQL。我通过尝试使用SQL命令直接插入MySQL来找到它。同样的错误。
因此,我在db中仔细查看,发现问题出在触发器上。在触发器之一中,仍使用列的旧名称。
现在有意义:Unknow column useless_id in 'where clause'
。 where clause
处于触发状态,试图找到useless_id
,但它不再存在。
结论:更改列名后,检查触发器。
答案 1 :(得分:-3)
在您的Java类中,您将列名从 useless_id 更改为 userful_id ,但同样认为您并未更改数据库结构,因此您会看到此错误。