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;
}
}