java.sql.SQLSyntaxErrorException:“字段列表”中的未知列
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/38948289/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.sql.SQLSyntaxErrorException: Unknown column in 'field list'
提问by Hadrian Blackwater
I am trying to work on a OneToMany relation using Hibernate. I am using @Temporal annotation to tell hibernate about the Data field. I am not sure why am I getting this error here. Looks like there is a problem with the Date format. Please let me know how to solve it.
我正在尝试使用 Hibernate 处理 OneToMany 关系。我正在使用 @Temporal 注释来告诉休眠有关数据字段的信息。我不确定为什么我会在这里收到此错误。看起来日期格式有问题。请让我知道如何解决它。
Customer
顾客
package regular;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
@Entity
public class Customers {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int customer_id;
private String customerName;
private String contactName;
private String address;
private String city;
private String postalCode;
private String country;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "customer_id")
private List<Orders> order;
public Customers() {
}
public List<Orders> getOrder() {
return order;
}
public void setOrder(List<Orders> order) {
this.order = order;
}
public Customers(String customerName, String contactName, String address, String city, String postalCode,
String country, List<Orders> order) {
this.customerName = customerName;
this.contactName = contactName;
this.address = address;
this.city = city;
this.postalCode = postalCode;
this.country = country;
this.order = order;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public int getCustomer_id() {
return customer_id;
}
@Override
public String toString() {
return "Customers [customer_id=" + customer_id + ", customerName=" + customerName + ", contactName="
+ contactName + ", address=" + address + ", city=" + city + ", postalCode=" + postalCode + ", country="
+ country + ", order=" + order + "]";
}
}
Orders
命令
package regular;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int orderId;
@Temporal(value = TemporalType.TIMESTAMP)
private Date orderDate;
private String productName;
private int quantity;
public Orders(String productName, int quantity) {
this.orderDate = new Date();
this.productName = productName;
this.quantity = quantity;
}
public Orders() {
}
public Date getOrderDate() {
return orderDate;
}
public void setOrderDate(Date orderDate) {
this.orderDate = orderDate;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public int getOrderId() {
return orderId;
}
@Override
public String toString() {
return "Orders [orderId=" + orderId + ", orderDate=" + orderDate + ", productName=" + productName
+ ", quantity=" + quantity + "]";
}
}
Runner
赛跑者
package regular;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Runner {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure("/regular/hibernate.cfg.xml")
.addAnnotatedClass(Customers.class).addAnnotatedClass(Orders.class).buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Customers customer = new Customers();
customer.setCustomerName("Robert Bosch");
customer.setAddress("404 California Ave");
customer.setCity("California");
customer.setPostalCode("60466");
customer.setCountry("USA");
List<Orders> orders = new ArrayList<>();
orders.add(new Orders("Car", 4));
orders.add(new Orders("Headphones", 6));
customer.setOrder(orders);
session.save(customer);
session.close();
}
}
Error
错误
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'orderDate' in 'field list'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:686)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:663)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:653)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:115)
at com.mysql.cj.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2041)
at com.mysql.cj.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1827)
at com.mysql.cj.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2041)
at com.mysql.cj.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:1977)
at com.mysql.cj.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:4963)
at com.mysql.cj.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1962)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)
... 41 more
回答by Hadrian Blackwater
Looks like there is a problem in my table names and database. I have changed the table names and it worked. Thanks everyone!
看起来我的表名和数据库有问题。我已经更改了表名并且它起作用了。感谢大家!
回答by Tomas Lukac
I have encountered the similar issue and thanks to this post I looked at the column names. In my case, I had a typo in
我遇到了类似的问题,多亏了这篇文章,我查看了列名。就我而言,我有一个错字
@ManyToOne
@JoinColumn(name = "client", referencedColumnName = "id")
private Client client;
Which should be
哪个应该是
@ManyToOne
@JoinColumn(name = "client_id", referencedColumnName = "id")
private Client client;
回答by Neeraj Kumar
Sometimes while inserting data into table , you are inserting into different table but in query you are writing different table's name.
有时在将数据插入 table 时,您正在插入不同的 table 但在查询中您正在写入不同的 table 名称。
More or less this answer matches with Question writer's answer.
这个答案或多或少与问题作者的答案相匹配。
回答by Vikash
I also faced a similar issue. I had a field named as
我也遇到了类似的问题。我有一个名为的字段
@Column(name = "CountryCode")
private String CountryCode
Apparently, it was being as country_code and not as countrycode (which is the real column in the table). I changed it to and it worked:
显然,它是作为 country_code 而不是作为 countrycode (这是表中的真实列)。我将其更改为并有效:
@Column(name = "countrycode")
private String CountryCode
So make sure you only start with a capital letter and not include it anywhere else in column name annotation, as it will break it up using _ and will use the 2nd caps as a delimiter to insert that _ .
因此,请确保您只以大写字母开头,并且不在列名注释中的任何其他地方包含它,因为它会使用 _ 将其分解,并将使用第二个大写字母作为分隔符来插入该 _ 。