Person类和User类一一对应,映射关系如下
private User user;@OneToOne(cascade={CascadeType.ALL}, mappedBy="person")
public User getUser() {
return user;
}
private Person person;@OneToOne()
@JoinColumn(name="personid")
public Person getPerson() {
return person;
}我想从person中查询还未配上User的person列表String hql = "from Person as p where p.user is null";可是没实现我要的结果,myeclipse后台输出的hibernate语句是的后半部分是from Person person0_ where person0_.id is not null怎么会是 person0_.id is not null,怎么就给变成 person0_.id呢,我要怎么写才能实现我要的功能

解决方案 »

  1.   

    你查询的是USEr对象 默认的USEr对象的iD
    你想查询User对象的其他属性 可以用 
     String hql = "from Person as p where p.user.* is null";
    * --代表的是任意属性
      

  2.   

    我就是想查询person中user为空的所有person,不只是user的某个属性为空
    我试了下你说的,出现提示:ERROR PARSER:56 - line 1:94: expecting IDENT, found '*'
      

  3.   

    我是由Person类来控制User@OneToOne(cascade={CascadeType.ALL}, mappedBy="person")
        public User getUser() {
            return user;
        }如果反过来,我要查的是User中person为空的所有User,写的是"from User as u where u.person is null"
    那么控制台的hibernate语句就会是:from User user0_ where user0_.personid is not nul,就会实现要的结果(没去试,不过之前都是这样写的,都可以实现)
    我在想是不是因为person类是控制端的原因,person的数据库中没有userid字段,而user的数据库中有personid,所以我那样写是不会实现的,我应该怎么写
      

  4.   

    用Criteria试下
    List cats = session.createCriteria(Person.class)
        .add(Restrictions.isNull("user"))
        .list();
      

  5.   

    是不是因为这个映射不对我在想是不是因为person类是控制端的原因,person的数据库中没有userid字段,而user的数据库中有personid,所以我那样写是不会实现的,我应该怎么写
    照你的形容你这个一对一映射应该是基于外键的,presonid作为user中的外键,但是你的注释是基于主键的一一映射。
    我也不确定了,因为我都是用XML配置的,不知道这个注释和XML是不是一样的,XML中用many-to-one +unique来配置主键作为其他表外键的部分。其实你可以直接用SQL的,Hibernate不是有SQLQuery嘛。。
      

  6.   

    添几条正确的记录 先确认映射没有问题 然后把 is null 换成 = null 试试?
      

  7.   

    另外你的查询是出异常啊 还是不好使啊? 不好使的话能查询出来数据么? 那么先把查询条件放到一边 把所有的USER的PERSON都输出下 看看如何?
      

  8.   

    String hql = "from Person as p where p.* is null";
    试下这个吧
      

  9.   

    试了 = null 查出的,后台hibernate打印出的语句仍然是那样
    其它的语句都没问题,就只有这条查不出,是不好使,可以输出所有user下的person
      

  10.   

    好久不写hibernate  关注下
      

  11.   

    我今天也碰到了这个问题,研究了下,可以用以下语句查出来:
    from Person as p left join p.user as u where u is null.
    hibernate默认情况下对关联属性的查询是采用inner join策略,因此
    from Person as p where p.user is null 语句是查不到user属性为空的person对象的!