2012-04-14 21 views
1

ich eine Datenbank mit den folgenden Tabellenstrukturen haben ...Hibernate speichern relationale Tabelle

Der Kunden Tabelle hat zwei Spalten: ID, Name.

Die Auftrag Tabelle hat zwei Spalten: id, CUSTOMER_ID

Es gibt eine Eins-zu-Eins-Beziehung zwischen diesen beiden Tabellen

Wenn ich meinen Code ausführen, die unten gegeben wird, Ich bekomme die folgende Ausnahme:

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" 

Hier ist mein Code. Könnte jemand helfen, die Ursache des Problems zu erklären ...

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

} 

Antwort

1

order ist ein SQL-Schlüsselwort. Wenn Sie nicht den Namen der Datenbank ändern können, versuchen Sie es mit:

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

Aber wenn Sie noch in der Entwicklung sind, ändern Tabellen- und Spaltennamen zu vermeiden SQL Keywords.

1

ORDER BY ist ein SQL-Schlüsselwort. Vielleicht verwirrt der Tabellenname den Parser. Ich würde empfehlen, dass Sie es umbenennen und es erneut versuchen.