我有兩個實體:category
有oneToMany
products
。春季引導:保存與oneToMany關係的實體時出錯
這些都是有類:
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:
@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
在CategoryBean
我有相同的字段Category
實體。在ProductBean
之一,我有相同的實體期望category
字段(以避免映射時的無限循環)。
從前面(我使用的是角度),我發送與實體具有相同文件夾的類別對象。換句話說,爲了保存它而發送給後面的類別對象包含:name
和products
的array
。
要保存的類別,這是我在做什麼:
//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
,這是錯誤:
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
請注意,我使用oracle
和flyway
。這是產品SQL
腳本:
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
腳本:
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");
假設錯誤不是「oneTomany」關係。堆棧跟蹤抱怨'無效的user.table.column'。認爲問題在那裏。請分享涉及該操作的用戶表和代碼。 –