私はあまり慣れていない休止状態による注文管理システムを実装しようとしています。例外により、プログラムで休止状態と同じように sql を手動で実行するように求められ、成功しました。何が問題なのかわからない。おそらく設計上の問題によるものです。データベースは次のようになります。
ORDER には ITEM テーブルの ITEM_ID を指す外部キー ITEM_ID があります。これは 1 対多の関係であり、CLINET テーブルの CLIENT_ID を指す別の外部キー CLIENT_ID です。注釈付きの 3 つのエンティティの定義は次のように記述されます。
@Table(name = "ITEM")
public class Item implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ITEM_ID", unique = true, nullable = false)
private int item_id;
@Column(name = "NAME")
private String name;
@Column(name="CATEGORY")
private String category;
@Column(name="UNIT")
private String unit;
@Column(name="PRICE")
private double price;
//getters and setters
}
@Entity
@Table(name="CLIENT")
public class Client implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "CLIENT_ID", unique = true, nullable = false)
private int client_id;
@Column(name="CLIENT_NAME")
private String client_name;
//getters and setters
}
@Entity
@Table(name="ORDER")
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ORDER_ID", unique = true, nullable = false)
private int order_id;
@ManyToOne(cascade = CascadeType.PERSIST,targetEntity=Client.class)
@JoinColumn(name = "CLIENT_ID", nullable = false)
private Client client;
@ManyToOne(cascade = CascadeType.PERSIST,targetEntity=Item.class)
@JoinColumn(name = "ITEM_ID", nullable = false)
private Item item;
@Column(name="QUANTITY")
private double quantity;
@Temporal(TemporalType.DATE)
@Column(name = "ORDER_DATE")
private Date order_date;
//getters and setters
}
注文データ挿入機能は次のようなものです。
public static void insertNewOrder(Item item,Client client, double quantity, Date date){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Order order = new Order();
order.setItem(item);
order.setClient(client);
order.setQuantity(new Double(quantity));
order.setOrder_date(date);
session.save(order);
session.getTransaction().commit();
session.close();
}
ここに私の例外があります:
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER (CLIENT_ID, ITEM_ID, ORDER_DATE, QUANTITY) values (1, 1, '2013-11-12', 1.4' at line 1
Exception in thread "main" org.hibernate.exception.SQLGrammarException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER (CLIENT_ID, ITEM_ID, ORDER_DATE, QUANTITY) values (1, 1, '2013-11-12', 1.4' at line 1
そのSQLを手動で試してみましたが、正常に挿入されました。問題がどこにあるのか、手がかりが見つかりません。助けてください。