1

次のテーブル構造のデータベースがあります...

Customerテーブルには、id、nameの2つの列があります。

Orderテーブルには、id、customer_idの2つの列があります。

これら2つのテーブルの間には1対1の関係があります

以下に示すコードを実行すると、次の例外が発生します。

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

}
4

2 に答える 2

1

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

于 2012-04-14T12:22:30.800 に答える
1

orderSQL キーワードです。データベース名を変更できない場合は、次を使用してみてください。

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

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

于 2012-04-14T12:34:24.157 に答える