Nano Hash - криптовалюты, майнинг, программирование

jpql Запрос соединения

у меня есть таблица ассоциации под названием MenuPrevilege между двумя таблицами под названием Menu и Previlege. Чтобы получить все меню определенной привилегии, я создал именованный запрос в сущности меню:

   @Entity
   @NamedQueries( {
   @NamedQuery(name = "getAllMenus", query = "select m from Menu m"),
   @NamedQuery(name = "getMenusByPrevilegeId", query = "select m from Menu m
            JOIN m.menuPrevilege mp where mp.previlege_id = :p")})


public class Menu implements Serializable {

private String url;
private String description;
private List<MenuPrevilege> menuPrevilges;
private static final long serialVersionUID = 1L;

public Menu() {
    super();
}

@Id
public String getUrl() {
    return this.url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getDescription() {
    return this.description;
}

public void setDescription(String description) {
    this.description = description;
}

public void setMenuPrevilges(List<MenuPrevilege> menuPrevilges) {
    if (menuPrevilges == null)
        menuPrevilges = new ArrayList<MenuPrevilege>();
    this.menuPrevilges = menuPrevilges;
}

@OneToMany(mappedBy = "menu", cascade = CascadeType.REMOVE)
public List<MenuPrevilege> getMenuPrevilges() {
    if (menuPrevilges == null)
        menuPrevilges = new ArrayList<MenuPrevilege>();
    return menuPrevilges;
}

public Menu(String url, String description) {
    super();
    this.url = url;
    this.description = description;
}
    }

у меня есть это исключение org.hibernate.QueryException: не удалось разрешить свойство:menuPrevilege , и я не знаю, как с этим справиться. это объект MenuPrevilage:

    @Entity
    @Table(name = "Menu_Previlege")

    public class MenuPrevilege implements Serializable {

private IdMenuPrevilege idmenuPrevilege = new IdMenuPrevilege();
private Date activationDate;
private Date deactivationDate;
private Menu menu;
private Previlege previlege;
private static final long serialVersionUID = 1L;

public MenuPrevilege() {
    super();
}

@EmbeddedId
public IdMenuPrevilege getIdmenuPrevilege() {
    return this.idmenuPrevilege;
}

public void setIdmenuPrevilege(IdMenuPrevilege idmenuPrevilege) {
    this.idmenuPrevilege = idmenuPrevilege;
}

@Temporal(TemporalType.DATE)
public Date getActivationDate() {
    return this.activationDate;
}

public void setActivationDate(Date activationDate) {
    this.activationDate = activationDate;
}

@Temporal(TemporalType.DATE)
public Date getDeactivationDate() {
    return this.deactivationDate;
}

public void setDeactivationDate(Date deactivationDate) {
    this.deactivationDate = deactivationDate;
}

public void setMenu(Menu menu) {
    this.menu = menu;
}

@ManyToOne
@JoinColumn(name = "menu_id", insertable = false, updatable = false)
public Menu getMenu() {
    return menu;
}

public void setPrevilege(Previlege previlege) {
    this.previlege = previlege;
}

@ManyToOne
@JoinColumn(name = "previlege_id", insertable = false, updatable = false)
public Previlege getPrevilege() {
    return previlege;
}

public MenuPrevilege(Menu menu, Previlege previlege) {
    super();
    getIdmenuPrevilege().setIdMenu(menu.getUrl());
    getIdmenuPrevilege().setIdPrevilege(previlege.getPrevilegeId());
    this.setMenu(menu);
    this.setPrevilege(previlege);
    menu.getMenuPrevilges().add(this);
    previlege.getPrevilegeMenus().add(this);
}

  }
18.06.2011

Ответы:


1

Я сделал рефакторинг имени для своего кода, отредактировал свой запрос, и все, кажется, работает. Вот изменения:

  1. в названном запросе:

    @NamedQuery(name = "getMenusByPrevilegeId", query = "select m from Menu m  JOIN 
     m.previleges p where p.previlege.previlegeId = :p")})
    
  2. атрибут сущности

    private List<MenuPrevilege> previleges;
    // getters and setters as well
    
  3. в конструкторе объекта MenuPrevilage

    public MenuPrevilege(Menu menu, Previlege previlege) {
    super();
    getIdmenuPrevilege().setIdMenu(menu.getUrl());
    getIdmenuPrevilege().setIdPrevilege(previlege.getPrevilegeId());
    this.setMenu(menu);
    this.setPrevilege(previlege);
    menu.getPrevileges().add(this);
    previlege.getMenus().add(this);
    }
    

как вы можете заметить, это была синтаксическая ошибка в моем запросе, которая вызвала исключение.

20.06.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..