2016-08-12 16 views
0

私は、Hibernateを使用して単純なOne To Manyリレーションシップを実行しようとしています。 1つのオーダーが多くのオーダーアイテムを持つことができるという考えがあります。なぜこの例外が出るのかわかりません。私は、オブジェクトの関係をHibernateでかなり新しくしています。このプログラムで設定に問題がある場合は、指摘してください。あなたが私に休止状態でこの種のマッピングをする方法を教えてくれれば、それは素晴らしいことでしょう。ありがとうございました!スキーマ例外Hibernate 1対多

注文

package one_to_many; 

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 Order { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int order_id; 
    private String name; 
    private String address; 

    @OneToMany(cascade = { CascadeType.ALL }, orphanRemoval = true, fetch = FetchType.LAZY) 
    @JoinColumn(name = "order_id", nullable = false) 
    private List<OrderItem> orderItems; 

    public Order() { 

    } 

    public Order(String name, String address, List<OrderItem> orderItems) { 
     this.name = name; 
     this.address = address; 
     this.orderItems = orderItems; 
    } 

    public int getOrder_id() { 
     return order_id; 
    } 

    public void setOrder_id(int order_id) { 
     this.order_id = order_id; 
    } 

    public String getName() { 
     return name; 
    } 

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

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public List<OrderItem> getOrderItems() { 
     return orderItems; 
    } 

    public void setOrderItems(List<OrderItem> orderItems) { 
     this.orderItems = orderItems; 
    } 

} 

のOrderItem

package one_to_many; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class OrderItem { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int orderItemId; 
    private String itemName; 
    private int quantity; 

    public int getOrderItemId() { 
     return orderItemId; 
    } 

    public void setOrderItemId(int orderItemId) { 
     this.orderItemId = orderItemId; 
    } 

    public String getItemName() { 
     return itemName; 
    } 

    public void setItemName(String itemName) { 
     this.itemName = itemName; 
    } 

    public int getQuantity() { 
     return quantity; 
    } 

    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 

    public OrderItem() { 

    } 

    public OrderItem(String itemName, int quantity) { 
     this.itemName = itemName; 
     this.quantity = quantity; 
    } 

    @Override 
    public String toString() { 
     return "OrderItem [orderItemId=" + orderItemId + ", itemName=" + itemName + ", quantity=" + quantity + "]"; 
    } 

} 

ランナー

package one_to_many; 

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("/one_to_many/hibernate.cfg.xml") 
       .buildSessionFactory(); 
     Session session = sessionFactory.openSession(); 
     session.beginTransaction(); 

     List<OrderItem> list = new ArrayList<OrderItem>(); 

     list.add(new OrderItem("book", 2)); 
     list.add(new OrderItem("tshirt", 4)); 

     Order order = new Order("regular", "919 Ridge", list); 

     session.save(order); 

     session.close(); 
    } 

} 

エラー

INFO: HHH000262: Table not found: Order 
Hibernate: 
    create table Order (
     order_id integer not null auto_increment, 
     address varchar(255), 
     name varchar(255), 
     primary key (order_id) 


    ) 
Aug 11, 2016 9:45:40 PM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Unable to execute command [ 
     create table Order (
      order_id integer not null auto_increment, 
      address varchar(255), 
      name varchar(255), 
      primary key (order_id) 

    )] 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Unable to execute command [ 
    create table Order (
     order_id integer not null auto_increment, 
     address varchar(255), 
     name varchar(255), 
     primary key (order_id) 
    )] 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:63) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:573) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:557) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.createTable(SchemaMigratorImpl.java:345) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.performMigration(SchemaMigratorImpl.java:257) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:137) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:110) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:176) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:65) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:308) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:483) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:707) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:723) 
    at one_to_many.Runner.main(Runner.java:15) 
Caused by: java.sql.SQLSyntaxErrorException: 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 (
     order_id integer not null auto_increment, 
     address varcha' at line 1 
    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.ConnectionImpl.execSQL(ConnectionImpl.java:1994) 
    at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:890) 
    at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:788) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:51) 
    ... 13 more 

Aug 11, 2016 9:45:40 PM org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl processGetTableResults 
INFO: HHH000262: Table not found: Order 
Aug 11, 2016 9:45:40 PM org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl processGetTableResults 
INFO: HHH000262: Table not found: Order 
Aug 11, 2016 9:45:40 PM org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl processGetTableResults 
INFO: HHH000262: Table not found: Order 
Aug 11, 2016 9:45:40 PM org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl processGetTableResults 
INFO: HHH000262: Table not found: Order 
Hibernate: 
    alter table OrderItem 
     add constraint FK1d77ns82kvwa2hwab9k7xcaog 
     foreign key (order_id) 
     references Order (order_id) 
Aug 11, 2016 9:45:40 PM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Unable to execute command [ 
    alter table OrderItem 
     add constraint FK1d77ns82kvwa2hwab9k7xcaog 
     foreign key (order_id) 
     references Order (order_id)] 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Unable to execute command [ 
    alter table OrderItem 
     add constraint FK1d77ns82kvwa2hwab9k7xcaog 
     foreign key (order_id) 
     references Order (order_id)] 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:63) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:573) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:557) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applyForeignKeys(SchemaMigratorImpl.java:516) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.performMigration(SchemaMigratorImpl.java:315) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:137) 
    at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:110) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:176) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:65) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:308) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:483) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:707) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:723) 
    at one_to_many.Runner.main(Runner.java:15) 
Caused by: java.sql.SQLSyntaxErrorException: 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 (order_id)' at line 4 
    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.ConnectionImpl.execSQL(ConnectionImpl.java:1994) 
    at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:890) 
    at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:788) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:51) 
    ... 13 more 

Hibernate: 
    insert 
    into 

    Order (address 
    , name) 
values 
    (?, ?) 
Aug 11, 2016 9:45:40 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 1064, SQLState: 42000 
Aug 11, 2016 9:45:40 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
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 (address, name) values ('919 Ridge', 'regular')' at line 1 
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute statement 
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207) 
    at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:57) 
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:42) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2840) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3411) 
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) 
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:619) 
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:273) 
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:254) 
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:299) 
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:318) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:275) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:113) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:668) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:660) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:655) 
    at one_to_many.Runner.main(Runner.java:26) 
Caused by: java.sql.SQLSyntaxErrorException: 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 (address, name) values ('919 Ridge', 'regular')' at line 1 
    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) 
    ... 22 more 
+0

問題は、データベースのテーブルに名前の順序がないことです。あなたのスタックトレースの最初の行にあるのはこれです。どのテーブルにマップしたいですか?あなたの場合、 '@ Table'アノテーションを使いたいとします。 [Java Persistence Wikibook](https://en.wikibooks.org/wiki/Java_Persistence)を見てください。それはJPAの良い紹介です。 – kaba713

+0

お返事ありがとうございます。私はそれを見て、それが役立ちます! –

答えて

1

「order」という名前は、mysqlの予約済みのキーワードです。テーブル名 'order'を変更します。

+0

お返事ありがとうございます。これで問題は解決しました。 –

関連する問題