例如:二个object User和Order(订单表)一个User可以有多个Order
User表为User信息,并不一要知道Order信息。而每个Order都要知道User在Order里面
public class Order{
    private User usr;
    ……
}但是在User里面没有任何Order的信息我是用xDoclet写的hbm.xml文件
写成如下:
在Order时里 /**
 * @hibernate.many-to-one
 *  column="user_id"
 *  class="com.demo.model.User"
 *  not-null="true"
 * 
   * @return 返回 user。
 */
public User getUser() {
return user;
}     
在User里面因为我不想要任何Order的信息,所以没有写。存Order是没有任何问题的,但是在
            Query query = session.createQuery("FROM order o Join User u WHERE LOWER(u.userID)=:userid");
            query.setString("userid", userID.toLowerCase());
            result = query.list();
报错
(hql.PARSER                          35  ) *** ERROR:  Path expected for join!
(hql.PARSER                          35  ) *** ERROR:  Invalid path: 'u.userID'

解决方案 »

  1.   

    user和order的关联关系不用写吗?user.id=order.userID
      

  2.   

    Hibernate里面好像是不用写的,我试一试。
      

  3.   

    好像不行呢,也没有办法写~~
    因为在Order里面只有User对像
    这个是HQL语言
      

  4.   

    那你就只查询order不行吗?它应该会自动使用迫切左外连结来加载对应的User。
      

  5.   

    from orders as o where o.user.id=?
      

  6.   


    不行,在Hibernate里面,Order 是一个Object,他已经没有userid这个属性了,只有User这个对象。
      

  7.   

    Order对应的表中应该有User表中的主键,作为一个外键
    配置文件应该是
    <?xml version="1.0"?> 
    <!DOCTYPE hibernate-mapping 
        PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping>     <class name="onlyfun.caterpillar.Order" table="ORDER">         <id name="id" column="ORDER_ID"> 
                <generator class="increment"/> 
            </id>         <property name="name"> 
                <column name="NAME" length="16" not-null="true"/> 
            </property> 
          
            <many-to-one name="user" 
                         column="USER_ID" 
                         class="onlyfun.caterpillar.User"/> 
        </class> </hibernate-mapping>