我写了宠物pet和petower两个实体,他们是manytoone关系 
@ManyToOne(fetch = FetchType.LAZY,cascade={CascadeType.ALL})
@JoinColumn(name = "petowerid", nullable = false)
public Petower getPetower() {
return this.petower;
}@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "petower")
public Set<Pet> getPets() {
return this.pets;
}这是两个实体写的注解,我这里写了cascade = CascadeType.ALL,那这样我查宠物的时候,petower就会也查出来
我的查询语句:from Pet as model,Petower where model.name like ? and model.petower.name like ?
但是我查出来后petower里面的值却全部为空,这个问题我纠结了半天,各位帮帮忙,哪里有问题啊,下面是完整的查询语句:
String queryString = "from Pet as model,Petower where model.name like ? and model.petower.name like ?";
Query queryObject = getSession().createQuery(queryString);
queryObject.setParameter(0, "%"+petname+"%");
queryObject.setParameter(1, "%"+petowername+"%");
                       return queryObject.list();

解决方案 »

  1.   

    那个queryString语句纠正一下应该是:"from Pet as model where model.name like ? and model.petower.name like ?",没有Petower
      

  2.   

      貌似你集成了Spring、把lazy属性设置一下~~~默认是true!
      把它改成false!!! lazy=“false”
      

  3.   

    我没有集成spring,就用的是hibernate
      

  4.   


    // 对于OneToMany,fetch默认就是LAZY,所以不写也可
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "petower")
    public Set<Pet> getPets() {
    return this.pets;
    }// 对于ManyToOne,fetch默认就是EAGER,你把它设为LAZY,当然就查不到了,所以,把此属性去掉或改为EAGER试试:
    @ManyToOne(fetch = FetchType.LAZY,cascade={CascadeType.ALL})
    @JoinColumn(name = "petowerid", nullable = false)
    public Petower getPetower() {
    return this.petower;
    }
      

  5.   

    String queryString = "from Petower petower,petower.pet model where model.name like ? and petower.name like ?";试试