当前位置: 首页 > 知识库问答 >
问题:

基于多对多映射的Hibernate查询

夹谷星剑
2023-03-14

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

Menu.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(){
    }

使用者爪哇:

@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中写这个查询如何处理这个东西???

共有1个答案

孔乐邦
2023-03-14

最后我找到了我的答案,这是我的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));
 类似资料:
  • 1. 前言 本节课,咱们一起继续聊聊多对多关联映射。通过本节课程,你将了解到: 多对多关联映射的实现; 双向多对多关联映射的实现。 2. 多对多关联映射 首先了解表中的多对多关系,学生表中的数据和课程表中的数据就存在多对多关系。 一名学生可以选修多门课程,一门课程可以供多名学生选修。 数据库通过主外键的机制描述表中的数据之间的关系。对于存在多对多关系的数据表,借助于中间表,分拆成两个一对多(或者多

  • 问题内容: 我正在开发一个处理以下两个实体的应用程序: 产品 (将其命名为X,Y,Z)和 材料 (a,b,c,…)。众所周知,每种产品都有一个配方,指示制造该产品所需的材料。例如,要产生一个X,我们需要2 a,6 c和4 d(X = 2a + 6c + 4d)。 这就是它在数据库表中的反映方式: 第三张表中的“计数”字段是同类材料(本例中为2、6、4)的系数。 所以我想以这种方式编写Product

  • 下面的映射给出的错误为 从db.karateInvoiceDetail引用db.karateInvoice的外键的列数错误。应为1 想法是有一个表,它的组合键为(id、fiscalyear和companyId),而表的组合键为(seqNo、InvoiceId、InvoiceFiscalYear和InvoiceCompanyId)。

  • 1. 前言 通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识 HIbernate 有很大的帮助。 通过本节课程,你将了解到: 多对多双向关联映射中哪一方是关系维系者; 级联操作与关系维系者。 2. 关系维系者 新学期开始了,同学们选择了各自喜欢的课程,现在为学生添加选修课程的任务就要落在 Hibernate 的身上。一起来看看 Hibernate 是如何完成这个任务

  • 有两张数据表,通过第三张数据表来表示关联关系,我们称之为多对多的映射 如上图,通过一个中间数据表的两个字段,分别指向两个对象的主键,可以实现多对多映射。所以,Pet.foods(一个 List<Food>) 或者 Food.pets(一个List<Pet>)就是多对多映射。 在 POJO 中配置多对多映射 在 POJO 类中字段中增加注解 @ManyMany: @Table("t_food")

  • 您好,我有多对多映射,在联接表中有额外的列。表结构如下所示。 关系如下 链接 我创建了如下POJO类 Vendor.java 学生。爪哇 测试。爪哇 供应商est.java 供应商学生测试PK。爪哇 Hibernate映射文件,如下所示 vendor.hbm.xml vendor\u student\u测试。hbm。xml 大学生hbm。xml 测验hbm。xml 我刚开始Hibernate,这是