0

I have Card and Menu with @ManyToMany relation. So, in my DB I have 3 tables(card, menu, card_menu). Also I have wrote sql-query, which takes right data:

select *
from card as c
inner join menu as children on (children.parent_menu=3)
inner join menu_card on (menu_card.card=c.id and menu_card.menu=children.id)

But i have problem with transforming this query to hibernate criteria query. At this moment i'd created next query:

Criteria criteria=sessionFactory.getCurrentSession().createCriteria(Card.class,"c")

.createAlias("c.menus", "children")
                .add(Restrictions.eq("children.parentMenu", 3))
                .createAlias("c.menus","menu")
                .add(Restrictions.conjunction(Restrictions.eq("menu.card","c.id"),Restrictions.eq("menu.id","children.id")))

My problem is on joining table "menu_card", i.e. at fact it's not exists in my objective models.

UPD: my entities

@Table(name = "card")
@Entity
public class Card {

    @Column(name = "id")
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToMany(mappedBy = "menu")
    private Set<Menu> menus;
....
}

@Table(name = "menu")
@Entity
public class Menu {
    @Column(name = "id")
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "menu_card", joinColumns = {@JoinColumn(name = "menu")},
            inverseJoinColumns = {@JoinColumn(name = "card")})
    private Set<Card> cards;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "parent_menu")
    private Menu parentMenu;
    }
}
Ivan Timoshin
  • 601
  • 9
  • 23

0 Answers0