2012-04-14 38 views
1

を保存Hibernateは...私は、次のテーブル構造を持つデータベースを持っているリレーショナルテーブル

カスタマーテーブルが2列あります。id、名前を。

注文テーブルが2列あります、IDは、この2つのテーブル

私は以下の通りである私のコードを、実行の間に1対1の関係があり

をCUSTOMER_ID次の例外が発生します。

Hibernate: insert into customer (name) values (?) 
Hibernate: insert into order (customer_id) values (?) 
05:02:46,374 WARN [main] JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 42601 
05:02:46,379 ERROR [main] JDBCExceptionReporter:234 - ERROR: syntax error at or near "order" 

ここは私のコードです。誰かが問題の原因を説明するのに役立つかもしれません...

@Entity 
@Table(name = "customer") 
public class Customer implements Serializable { 


    public Customer() { 
    } 

    private long id; 
    private String name; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", insertable = false, updatable = false, nullable = false) 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @Column(name = "name") 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 


@Entity 
@Table(name = "order") 

public class Order implements Serializable { 
    public Order() { 
    } 

    public Order(Customer customer) { 
     this.customer = customer; 
    } 

    private long id; 
    private Customer customer; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", insertable = false, updatable = false, nullable = false) 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @OneToOne(cascade = { CascadeType.ALL }) 
    @JoinColumn(name = "customer_id") 
    public Customer getCustomer() { 
     return customer; 
    } 

    public void setCustomer(Customer customer) { 
     this.customer = customer; 
     // setCustomerId(customer.getId()); 
    } 
} 

public static void main(String[] args) { 

    Customer cm = new Customer(); 
    cm.setName("John"); 

    Order ord = new Order(cm); 

    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
    Session session = sessionFactory.openSession(); 

    Transaction transaction = null; 

    try { 
     transaction = session.beginTransaction(); 
     session.save(ord); 
     transaction.commit(); 
} 
    catch (HibernateException e) { 
     transaction.rollback(); 
     e.printStackTrace(); 
    } 
    finally { 
     session.close(); 
    } 

} 

答えて

1

orderはSQLキーワードです。

@Table(name = "\"order\"") 

まだ開発中の場合は、SQLキーワードを使用しないようにテーブル名とカラム名を変更してください。

1

ORDER BYはSQLキーワードです。テーブル名がパーサを混乱させている可能性があります。名前を変更してもう一度やり直すことをお勧めします。

関連する問題