用到复合主键,它的查询方法我不太熟悉。
hbm.xml是这样的。[code="java"]
[/code]
EmpInfo .java是这样的 太长,去掉一部分
[code="java"]public class EmpInfo implements java.io.Serializable {
// Fields
private EmpInfoId id;
// Constructors
/** default constructor */
public EmpInfo() {
}
/** full constructor */
public EmpInfo(EmpInfoId id) {
this.id = id;
}
// Property accessors
public EmpInfoId getId() {
return this.id;
}
public void setId(EmpInfoId id) {
this.id = id;
}
}[/code]
EmpInfoId.java是这样的。
[code="java"]
public class EmpInfoId implements java.io.Serializable {
// Fields
private Integer empId;
private String empCode;
private String empName;
private String empSex;
// Property accessors
public Integer getEmpId() {
return this.empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpCode() {
return this.empCode;
}
public void setEmpCode(String empCode) {
this.empCode = empCode;
}
}[/code]
请问我想查我通过empCode empName改如何做?
我的代码如下,但是失败:
[code="java"]Criteria cr1=this.getSession().createCriteria(EmpInfo.class);
cr1.add(Restrictions.eq("id.empCode", cardNo));
EmpInfo empInfo=(EmpInfo) cr1.uniqueResult();
if(empInfo!=null){
System.out.println(empInfo.getId().getEmpName());
}[/code]
[b]问题补充:[/b]
大哥,myeclispe生成的就是这样的啊!
[b]问题补充:[/b]
也,那几个大佬呢?
[b]问题补充:[/b]
你这样的方法我刚才自己试过,但是查到的为null,应该不能为null才对。我在用sql试一下。谢谢你!可以继续关注。
[b]问题补充:[/b]
String sql="select * from SmartCardDB.dbo.EmpInfo as emp where emp.empCode="+cardNo;
SQLQuery sq=this.getSession().createSQLQuery(sql); 怎么把这个sq得到的数据迭代出来?
[b]问题补充:[/b]
大哥,这个不行的,如果直接用jdbc肯定是可以,刚才我想和你一样去改配置文件和POJO的,但是不知道怎么去改配置文件!不管怎么说,会给你的。
[b]问题补充:[/b]
code="java"]List list = sq.list();[[/code]之后呢?还是没有办法去读取每一个字段的值。还是想改pojo和配置文件。
[quote]大哥,这个不行的,如果直接用jdbc肯定是可以,刚才我想和你一样去改配置文件和POJO的,但是不知道怎么去改配置文件!不管怎么说,会给你的。 [/quote]
empId 是你的主键吧,把那些属性全部弄到EmpInfo类中,在EmpInfo类中去掉EmpInfoId这个对象,然后修改hbm配置文件,去掉下面这句
[code="xml"]
[/code]
改为
[code="xml"]
<!--生成策略自己定-->
<!--如此类推-->[/code]
倒,empName怎么会放在EmpInfoID主键类里面呢?
建议你修改一下这个主键类,改成如下:
[code="java"] public class EmpInfoId implements java.io.Serializable {
// Fields
private Integer empId;
private String empCode;
// Property accessors
public Integer getEmpId() {
return this.empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpCode() {
return this.empCode;
}
public void setEmpCode(String empCode) {
this.empCode = empCode;
}
} [/code]
然后实例化这个EmpInfoID,最后根据这个ID去找EmpInfo,把name和sex放在EmpInfo里面。
给这个EmpInfoId加一个空的构造方法和一个包含全属性的构造方法。
然后先实例化一个EmpInfoId的对象,然后根据这个对象去找到EmpInfo对象。
[code="java"] EmpInfoId empInfoId = new EmpInfoId();
empInfoId.setEmpCode(cardNo);
Criteria cr1=this.getSession().createCriteria(EmpInfo.class);
cr1.add(Restrictions.eq("empInfoId", empInfoId));
EmpInfo empInfo=(EmpInfo) cr1.uniqueResult();
if(empInfo!=null){
System.out.println(empInfo.getId().getEmpName());
. } [/code]
[quote]你这样的方法我刚才自己试过,但是查到的为null,应该不能为null才对。我在用sql试一下。谢谢你!可以继续关注。[/quote]
老兄,说实话,如果是我碰到这种问题,我会去改配置文件和POJO的,呵呵,就是去掉myeclipse自动生成的主键类,然后改配置文件,也去掉id属性中的主键类。
[quote]String sql="select * from SmartCardDB.dbo.EmpInfo as emp where emp.empCode="+cardNo;
SQLQuery sq=this.getSession().createSQLQuery(sql); 怎么把这个sq得到的数据迭代出来? [/quote]
[code="java"]List list = sq.list();[/code]