2016-11-29 3 views
0

У меня есть два объекта в моем веб-приложении. Один из них - UserDetails, а другой - OrderDetails.Не удалять дочерние строки в спящем режиме

@Entity 
@Table(name="USER_DETAILS") 
public class UserDetails { 

@OneToMany(cascade=CascadeType.ALL,orphanRemoval=true) 
@JoinTable(name="USER_CART", 
      [email protected](name="USER_ID"), 
      [email protected](name="CART_ID") 
     ) 

private Collection<CartList> cartList= new ArrayList<CartList>(); 

public Collection<CartList> getCartList() { 
    return cartList; 
} 
public void setCartList(Collection<CartList> cartList) { 
    this.cartList = cartList; 
} 

} 

И я пытаюсь удалить CartList из UserDetails, выполнив следующий код.

List<CartList> cartLists=new ArrayList<>(); 

    try{ 

    Query<CartList> query=session.createQuery("from UserDetails where userEmail=?"); 
    query.setString(0, user); 

    cartLists=query.list(); 

    System.out.print(String.valueOf(cartLists)); 

    for(CartList temp:cartLists){ 

     session.delete(temp); 

    } 

    session.getTransaction().commit(); 
    }catch (Exception e) { 
     return "unsuccessful"; 
    } 

Но следующий код вызывает ошибку.

WARN [http-nio-8080-exec-6]  org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions SQL Error: 1451, SQLState: 23000 
ERROR [http-nio-8080-exec-6] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions Cannot delete or update a parent row: a foreign key constraint fails (`ebdb`.`USER_CART`, CONSTRAINT `FKcdargk7kuorrqnumdp06jtqua` FOREIGN KEY (`CART_ID`) REFERENCES `CART_LIST` (`id`)) 
INFO [http-nio-8080-exec-6] org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.release HHH000010: On release of batch it still contained JDBC statements 
ERROR [http-nio-8080-exec-6] org.hibernate.internal.ExceptionMapperStandardImpl.mapManagedFlushFailure HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute statement] 

Пожалуйста, помогите мне. Я не понимаю, что я делаю неправильно. Пожалуйста, помогите мне.

ответ

0

Вы пытаетесь удалить запись из родительской таблицы (OrderDetails), записи которой связаны с дочерней таблицей (UserDetails), это означает, что столбец родительской таблицы используется как внешний ключ (CART_ID) в вашей дочерней таблице, вы должны сначала удалить данные из дочерняя таблица, соответствующая записи в родительской таблице. Другим соображением является то, что во время создания таблицы вы должны указать условие, хотите ли вы удалить всю дочернюю запись, связанную с родительской записью. Например:

CREATE TABLE PADRE{ 
IDPADRE INT PRIMARY KEY 
IDABUELO INT CONSTRAINT FK_IDABUELO FOREIGN KEY IDABUELO REFERENCES ABUELO(IDABUELO) ON DELETE CASCADE 
} 
+0

Я хочу, чтобы удалить только строки из детского table.what будет лучшим way.I я не смог найти что-нибудь на интернет also.It становится громоздким для меня. –

Смежные вопросы