2017-05-03 3 views
0

categoryには productsの2つのエンティティがあります。私はCategoryエンティティと同じフィールドを持つCategoryBeanSpringブート:oneToManyリレーションを持つエンティティを保存中にエラーが発生しました

 @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private Long id; 

     @Column(name = "NAME") 
     private Long NAME; 

     @OneToMany(cascade = CascadeType.ALL, mappedBy = "category", orphanRemoval = true) 
     private List<Product> products; 

     //...getters, setters and toString 

Product.java

@Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "NAME") 
    private Long NAME; 

    @ManyToOne 
    @JoinColumn(name="CATEGORY_ID", nullable = false) 
    private Category category; 

    //...getters, setters and toString 

Category.java:

ものがあるクラスです。 ProductBeanでは、エンティティがcategoryフィールドを期待しているのと同じことがあります(マッピング時に無限ループを避けるため)。

正面から(私は角を使用しています)、エンティティと同じフィールドを持つカテゴリオブジェクトを送信します。つまり、保存するために背中に送るカテゴリオブジェクトは、namearrayproductsです。

//from bean to entity 
Category category = CategoryMapper.toEntity(categoryBean); 
// NOTE: the category is containing the list of its products 
Category result = categoryRepository.save(category); 
return CategoryMapper.toBean(result); 

しかし、私は500 statusを持って、これは誤りです::

カテゴリを保存するには、これは私がやっているものです私は oracleとを使用してい

00:04:08.940 [http-nio-8080-exec-2] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1747, SQLState: 42000 
00:04:08.940 [http-nio-8080-exec-2] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-01747: invalid user.table.column, table.column, or column specification 

00:04:09.276 [http-nio-8080-exec-2] WARN ma.neoxia.exceptions.RestResponseEntityExceptionHandler - INTERNAL_SERVER_ERROR error 
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:261) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) 
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:504) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656) 
    at 

注意flyway

CREATE TABLE "PRODUCT" 
    ( "ID" NUMBER(10,0), 
    "NAME" VARCHAR2(255 CHAR), 
    "CATEGORY_ID" NUMBER(10,0) 
    ); 

CREATE UNIQUE INDEX "PRODUCT_ID_IDX" ON "PRODUCT" ("ID"); 

ALTER TABLE "PRODUCT" MODIFY ("ID" NOT NULL ENABLE); 

ALTER TABLE "PRODUCT" ADD PRIMARY KEY ("ID"); 

ALTER TABLE "PRODUCT" MODIFY ("CATEGORY_ID" NOT NULL ENABLE); 

そして、これが私のカテゴリーSQLスクリプトです::これは、製品SQLスクリプトは、あなたのSQLファイルで

CREATE TABLE "CATEGORY" 
     ("ID" NUMBER(19,0), 
    "NAME" VARCHAR2(255 CHAR) 
    ); 

    CREATE UNIQUE INDEX "CAT_ID_IDX" ON "CATEGORY" ("ID"); 

    ALTER TABLE "CATEGORY" MODIFY ("ID" NOT NULL ENABLE); 

    ALTER TABLE "CATEGORY" ADD PRIMARY KEY ("ID"); 
+0

エラーが 'oneTomany'関係には反映されないとします。 stack-traceは 'invalid user.table.column'について文句を言います。問題がそこにあると考えてください。その操作を含むユーザーテーブルとコードを共有してください。 –

答えて

0

、あなたは同じでなければなりません、CATEGORY_ID列に外部キー制約を追加するために逃しました

CATEGORYテーブル内の ID

と長さにあなたはこのようにそれを行うことができます

Alter TABLE PRODUCT 
MODIFY "CATEGORY_ID" NUMBER(19,0); 

ALTER TABLE PRODUCT 
ADD CONSTRAINT FK_CategoryProduct 
FOREIGN KEY (CATEGORY_ID) REFERENCES CATEGORY(ID); 
+0

問題はJavaコードではなくSQLスクリプトにありますか? –

+0

@Llg共有Javaコード – fujy

+0

に示されている例外に関連する問題はありません。コードはOracle構文で記述されていますか? –

関連する問題