【问题标题】:Hibernate query on many to many mapping多对多映射的休眠查询
【发布时间】:2017-01-19 11:40:22
【问题描述】:

我一直在使用多对多映射,这里是我的 POJO 类。

菜单.java:

@Entity
@Table(name = "menu")
public class Menu {

    @Id
    @Column(name = "menuid")
    @GeneratedValue
    private int menuid;

    @Column(name = "parentid")
    private int parentid;

    @Column(name = "menuname")
    private String menuname;

    @Column(name = "url")
    private String url;

    @Column(name = "status")
    private String status;

    @Column(name = "usertype")
    private String usertype;

    @Column(name = "isparent")
    private boolean isParent;
    private ArrayList<Menu> childMenu;

    @ManyToMany(mappedBy="menus")                                       
    private List<User> users;

    public Menu(Integer menuid){
        this.menuid=menuid;
    }

    public Menu(){
    }

用户.java:

@Entity
@Table(name = "user")
public class User implements Serializable {

    @Id
    @Column(name = "userid")
    @GeneratedValue
    private Integer userId;

    @Column(name = "OUTLET_ID")
    private int outletId;

    @Column(name = "NAME")
    private String name;

    @Column(name = "USERTYPE")
    private String userType;

    @Column(name = "LOGINID")
    private String loginId;

    @Column(name = "PASSWORD")
    private String password;

    @Column(name = "CREATEDDATE")
    private String createdDate;

    @Column(name = "CONTACTNUMBER")
    private String contactNumber;

    @Column(name = "EMAILID")
    private String emailId;

    @Column(name = "OUTLETTYPE")
    private String outlettype; 

    @Transient
    private String nsec;

    @javax.persistence.Transient
    ArrayList<Integer> menuid;

    @javax.persistence.Transient
    ArrayList<Long> clientid;

    @javax.persistence.Transient
    ArrayList<String> clientName;

    @ManyToMany(fetch=FetchType.EAGER) @JsonIgnore
    @JoinTable(name="user_menu",joinColumns={@JoinColumn(name="userid")},
                                                    inverseJoinColumns={@JoinColumn(name="menuid")})
    public List<Menu> menus;

    @ManyToMany(fetch=FetchType.EAGER) @JsonIgnore
    @JoinTable(name="user_client",joinColumns={@JoinColumn(name="userid")},
                                                    inverseJoinColumns={@JoinColumn(name="outletid")})

    public List<Client> clients;

    public User() { 
    }

我有自动创建的用户、菜单和第三个映射表user_menu,我在mysql中触发以下查询时成功得到结果

select * from menu m inner join user_menu um on m.menuid = um.menuid where um.userid = 41;

我想在hibernate中写这个查询怎么弄这个东西???

【问题讨论】:

标签: java mysql hibernate


【解决方案1】:

终于找到答案了,这是我的hql查询,

    String sql = "select m.menuid as menuid,m.parentid as parentid,m.menuname as menuname,m.url as url,m.status as status,m.usertype as usertype,m.isParent as isParent,m.childMenu as childMenu from Menu m join m.users u where u.userId = "+userid +""; 
    q  =  session.createQuery(sql).setResultTransformer(Transformers.aliasToBean(Menu.class));

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多