Удаление из спящего режима: SQLGrammarException Неожиданный токен: CROSS

1

У меня есть 3 сущности:

Объект A, объект B, объект C.

public class Entity_A {

    public List<Entity_B> entBList;
    Some other objects...

     @OneToMany(mappedBy="entityA", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER, orphanRemoval=true)
     @Fetch(value = FetchMode.SUBSELECT)
     public List<GebruikerKind> getEntBList() {
        return entBList;
     }

} 

public class Entity_B {
    public Entity_A entityA;
    public Entity_C entityC;
    Some other objects...


    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "COLUMNJOINNAME")
    public Entity_A getEntityA() {
        return entityA;
    }

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "OTHERCOLUMNJOINNAME)
    public Entity_C getEntityC() {
        return entityC;
    }
}

public class Entity_C {
    public List<Entity_B> entBList;
    Some other objects...


     @OneToMany(mappedBy="entityC", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER, orphanRemoval=true)
     @Fetch(value = FetchMode.SUBSELECT)
     public List<GebruikerKind> getEntBList() {
        return entBList;
     }
} 

Обратите внимание: все сеттеры доступны, и есть много других доступных объектов :). Насколько я знаю, моя конфигурация хорошая.. Я пытаюсь удалить Entity_B:

Query query = getCurrentSession().createQuery(
            "delete from " + Entity_B.class.getName() + " eb " +
            " where eb.entityA.someField = :someField and eb.entityC.someOtherField = :someOtherField"); 


    query.setString("someField", someId);
    query.setString("someOtherField", someOtherId);
    return query.executeUpdate();

Смуты в раю:

Hibernate бросает мне это SQLGrammarException: Неожиданный токен: Cross. Кто-нибудь знает, что я могу сделать?

  • 0
    Проверь это
  • 2
    Вы можете проверить фактический sql, если включите функцию show_sql и измените уровень журнала на отладочный. Вы можете проверить, где находится синтаксическая ошибка в этом sql и попытаться устранить ее.
Показать ещё 1 комментарий
Теги:
hibernate
hql

1 ответ

1
Лучший ответ

Одним из решений является переписать запрос.

Вы можете избежать перекрестного соединения между eb.entityA и eb.entityC, написав SQL-запрос для извлечения идентификаторов, которые необходимо удалить. Затем вызовите HQL delete на каждом из этих идентификаторов.

  • 0
    Это было именно то, что я сделал :). забыл упомянуть об этом здесь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню