2016-08-15 64 views
1

我正在嘗試使用Hibernate處理OneToMany關係。我正在使用@Temporal註釋來告訴hibernate關於數據字段。我不知道爲什麼我在這裏得到這個錯誤。看起來日期格式有問題。請讓我知道如何解決它。java.sql.SQLSyntaxErrorException:'字段列表'中的未知列

客戶

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 + "]"; 
    } 

} 

訂單

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 + "]"; 
    } 

} 

亞軍

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(); 
    } 

} 

錯誤

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

那麼,你的'Orders'表有一個名爲'orderDate'的列嗎? – Andreas

+0

是的,它的確如此。我不知道爲什麼我得到這個錯誤。 –

+0

你有沒有嘗試過:@Temporal(value = TemporalType.Date),因爲該字段是日期? –

回答

1

看起來像我的表名和數據庫有問題。我已經改變了表名,它工作。感謝大家!

相關問題