简体   繁体   English

在休眠中编写内部联接

[英]to write inner join in hibernate

I have three class User, Department and Designation 我有三类用户,部门和职务

User.java User.java

public class User implements Serializable{  
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;

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

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

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

    @Column(name="mobNo")
    private BigDecimal mobNo;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "deptId")
    private Department department;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "desgId")
    private Designation designation;

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

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

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

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

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

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

    @Column(name="creationDate")
    private Timestamp creationDate;

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

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

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

    @Column(name="otp")
    private String otp ;
}

Department.java Department.java

public class Department implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int deptid;

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

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

    @Column(name="creationdt")
    private Timestamp creationdt;

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

Designation.java Designation.java

public class Designation implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int desgid;

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

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

    @Column(name="creationdt")
    private Timestamp creationdt;

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

    public Designation() {
    }
}

SQL SQL

select u.username, u.mobno, dp.deptnm, ds.desgnm, u.loginstatus from  usermst u
    inner join  deptmst dp ON u.deptid=dp.deptid 
    INNER JOIN  desigmst ds on u.desgid=ds.desgid

I want to write query on it as How to write this sql query in hibernate? 我想写关于它的查询如何在休眠状态下写这个SQL查询? I tried by criteria, hql but did not work 我按条件尝试过,但无法正常工作

In that case, you don't really need an hql join, you can just navigate through the department and designation associations. 在这种情况下,您实际上并不需要hql连接,只需浏览部门和名称关联即可。 Try this if you really want the result as a collections of array 如果您确实想要将结果作为数组的集合,请尝试此操作

select
    u.username, u.mobno, u.department.deptnm, u.designation.desgnm, u.loginstatus
from
    User u

to use such query 使用这样的查询

Query query=sessionFactory.getCurrentSession().createQuery("select u.userName, u.mobNo, u.department.deptnm, u.designation.desgnm, " + "u.loginStatus from User u");
List<Object[]> list=query.list(); 

but if you just want to get a list of user 但是如果您只想获取用户列表

Query query=sessionFactory.getCurrentSession().createQuery("from User u");
List<User> list=query.list();

are you try this way? 你这样尝试吗?

  String query = "select u.username, u.mobno, 
  u.loginstatus, dp.deptnm, ds.desgnm  from  USERMST 
  u, DEPTMST dp, DESIGMST ds where 
  u.deptid=dp.deptid and u.desgid=ds.desgid";

  SQLQuery query = session.createSQLQuery(query);

query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

  List data = query.list();

  for (Object object : data) {
     Map row = (Map) object;
     sysout(row.get("username"));
     //similar-way all the values

  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM