簡體   English   中英

在休眠中編寫內部聯接

[英]to write inner join in hibernate

我有三類用戶,部門和職務

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

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

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

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

我想寫關於它的查詢如何在休眠狀態下寫這個SQL查詢? 我按條件嘗試過,但無法正常工作

在這種情況下,您實際上並不需要hql連接,只需瀏覽部門和名稱關聯即可。 如果您確實想要將結果作為數組的集合,請嘗試此操作

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

使用這樣的查詢

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(); 

但是如果您只想獲取用戶列表

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

你這樣嘗試嗎?

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

  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