java.sql.SQLSyntaxErrorException: Unknown column in 'field list'

7 浏览
0 Comments

java.sql.SQLSyntaxErrorException: Unknown column in 'field list'

我正在尝试使用Hibernate处理OneToMany关系。我正在使用@Temporal注解来告诉Hibernate关于Data字段。我不确定为什么会出现这个错误。看起来与日期格式有问题。请告诉我如何解决它。

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 order;
    public Customers() {
    }
    public List getOrder() {
        return order;
    }
    public void setOrder(List order) {
        this.order = order;
    }
    public Customers(String customerName, String contactName, String address, String city, String postalCode,
            String country, List 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 = 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

0
0 Comments

Hibernate默认将驼峰命名法转换为下划线命名法。因此,您可以更改表中的列以反映这一点,或者更改Hibernate的命名策略。

然而,有时候在使用Hibernate时,可能会遇到一个错误,错误消息为"java.sql.SQLSyntaxErrorException: Unknown column in 'field list'"。这个错误通常是由于数据库表中的列名与Hibernate的默认命名策略不匹配导致的。

解决这个问题的方法有两种:

1. 更改数据库表的列名:根据Hibernate的默认命名策略,将表中的列名改为下划线命名法。例如,如果您的表中有一个名为"myColumnName"的列,您可以将其改为"my_column_name"。这样,Hibernate将能够正确地与数据库交互,避免出现"Unknown column in 'field list'"错误。

2. 更改Hibernate的命名策略:如果您不想更改数据库表的列名,您可以选择更改Hibernate的命名策略。Hibernate提供了几种命名策略,您可以根据自己的需求选择适合的策略。例如,您可以使用"org.hibernate.cfg.DefaultComponentSafeNamingStrategy"来避免将驼峰命名法转换为下划线命名法。要更改命名策略,您可以在Hibernate配置文件中进行相应的配置。

无论您选择哪种方法,都需要确保数据库表的列名与Hibernate的命名策略保持一致,以避免出现"Unknown column in 'field list'"错误。这样,您就能够顺利地使用Hibernate进行数据操作了。

以上就是关于"java.sql.SQLSyntaxErrorException: Unknown column in 'field list'"问题的原因和解决方法的整理。希望能对您有所帮助。

0
0 Comments

在使用Hibernate和Spring Boot开发应用程序时,有些用户可能会遇到一个错误:java.sql.SQLSyntaxErrorException: Unknown column in 'field list'。这个错误的出现是由于字段命名策略引起的。

有一个相关的Stack Overflow链接(Hibernate field naming issue with Spring Boot (naming strategy))可以帮助解决这个问题。在这个链接中,建议在application.properties文件中添加以下内容:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这行代码的作用是将Hibernate的字段命名策略设置为PhysicalNamingStrategyStandardImpl。通过设置这个命名策略,可以解决Unknown column in 'field list'错误。

通过在application.properties文件中添加上述代码,可以解决这个错误,并确保Hibernate和Spring Boot应用程序能够正确处理字段命名策略。这个解决方法可以帮助开发人员避免在使用Hibernate和Spring Boot时遇到字段命名问题所导致的错误。

0
0 Comments

原因:表名或数据库名可能被更改,导致出现了java.sql.SQLSyntaxErrorException: Unknown column in 'field list'错误。

解决方法:检查表名和数据库名的配置是否正确。

0