以下getBlog 方法中为何在 
Query query = session.createQuery("from Blog blog left join Links links where blog.username=links.name and blog.username=:userId"); 
语句时报:org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! [from blogs.Blog blog left join Links links where blog.username=links.name and blog.username=:userId] 请位这是为什么?先谢了!!!!!! ----------方法如下------------------ 
/** 
* 使用外连接方式进行多表查询处理 
*/ 
public Blog getBlog (String userId) throws HibernateException { 
Session session = HibernateUtil.currentSession(); 
List alist = new ArrayList(); 
Blog blog = null; 
Transaction tx = null; 
try { 
tx = session.beginTransaction(); 
        Query query = session.createQuery("from Blog blog left join Links links where blog.username=links.name and blog.username=:userId"); 
query.setParameter("userId", userId); 
alist=query.list(); 
if (!alist.isEmpty()) 
blog = (Blog) alist.get(0); tx.commit(); 
} catch (HibernateException e) { 
if (tx != null) 
tx.rollback(); 
e.printStackTrace(); 
throw e; 

session.close(); 
return blog; 

--------------持久化类--- 
public class Blog { 
private int id; 
private String username; 
private String password; 
private String subject; 
private String email; 
private String image; 
private int visitcount; 
//应构造方法是用于取一个表中部份列而用的确 
public Blog(String userName,String password) { 
    this.username = userName; 
    this.password = password; 

public int getId() { 
return id; 

public void setId(int id) { 
this.id = id; 

public String getPassword() { 
return password; 

public void setPassword(String password) { 
this.password = password; 

public String getUsername() { 
return username; 

public void setUsername(String username) { 
this.username = username; 

public String getImage() { 
return image; 

public void setImage(String image) { 
this.image = image; 

public String getSubject() { 
return subject; 

public void setSubject(String subject) { 
this.subject = subject; 

public String getEmail() { 
return email; 

public void setEmail(String email) { 
this.email = email; 

public int getVisitcount() { 
return visitcount; 

public void setVisitcount(int visitcount) { 
this.visitcount = visitcount; 


---持久化类--- 
public class Links { 
private int id; 
private String name; 
private String url; 
private int blogid; 
public int getId() { 
return id; 

public void setId(int id) { 
this.id = id; 

public String getName() { 
return name; 

public void setName(String name) { 
this.name = name; 

public int getBlogid() { 
return blogid; 

public void setBlogid(int blogid) { 
this.blogid = blogid; 

public String getUrl() { 
return url; 

public void setUrl(String url) { 
this.url = url; 


------------XML配置如下---- 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="blogs">     <class name="blogs.Blog" 
            table="blog" 
            discriminator-value="C"> 
                
      <id name="id"> 
            <generator class="increment"/> 
        </id>         <property name="username"/> 
        <property name="password"/> 
        <property name="subject"/> 
        <property name="email"/> 
        <property name="image"/> 
        <property name="visitcount"/> 
</class> 
  
    <class name="blogs.Links" 
            table="links" 
            discriminator-value="C"> 
                
        <id name="id"> 
                <generator class="increment"/> 
        </id>         <property name="name"/> 
        <property name="url"/> 
        <property name="blogid"/> 
  
        
</class> 
</hibernate-mapping> 

解决方案 »

  1.   

    这是因为楼主的Bolg类和Links类没有对应的外键关系。这种情况下上面的hql可改为:from Blog blog, Links links where blog.username=links.name and blog.username=:userId
      

  2.   

    如果本人只想获取Bolg类和Links类中各对应的一个映射列,也就是只反回两列,应该如何处理?
      

  3.   

    如果我方法改为如下:为何总是在Query query = session.createQuery("select blog.username,links.url  from Blog blog  left join blog.Links links  where blog.username=:userId");
    行报错:
    org.hibernate.QueryException: could not resolve property: Links of: blogs.Blog [select blog.username,links.url  from blogs.Blog blog  left join blog.Links links  where blog.username=:userId]
    at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43).
    .
    .
    public List getBlog(String userId) throws HibernateException {
    Session session = HibernateUtil.currentSession();
    List alist = new ArrayList();
    Transaction tx = null;
    try {
    tx = session.beginTransaction();
              Query query = session.createQuery("select blog.username,links.url  from Blog blog  left join blog.Links links  where blog.username=:userId");
    query.setParameter("userId", userId);
    Iterator it =query.list().iterator();
      while(it.hasNext()){   Object[] row = (Object[])it.next();
      String username = (String) row[0]; 
      String url = (String) row[1]; 
      System.out.println("username=="+username+"=url="+url);         }
    tx.commit();
    } catch (HibernateException e) {
    if (tx != null)
    tx.rollback();
    e.printStackTrace();
    throw e;
    }
    session.close();
    return alist;
    }
      

  4.   

    在hibernate中要使用left join必须声明关联映射,这里的关联是many-to-many,请问在以上代码中如可配置??????