表的关系:表user:id,name,password;表message:id,content,byuserid;
public class User {
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public class Message {
private int id;
private String content;
private int byuserid;
private User user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getByuserid() {
return byuserid;
}
public void setByuserid(int byuserid) {
this.byuserid = byuserid;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
public class MessageDAOImpl extends HibernateDaoSupport implements MessageDAO { public List<Message> findAllMessage(User user) {
List message = getHibernateTemplate().find("from Message message left join User user on message.byuserid=user.id where message.byuserid=?",new Object[] {user.getId()});

if(message.size()>0){
return message;
}else{
return null;
}
}
}Message.hbm.xml:
<hibernate-mapping>
<class name="com.blog.bean.Message" table="Message">
<id name="id" type="java.lang.Integer" column="id">
<generator class="increment"></generator>
</id>
<property name="title" type="string" column="title" length="255"></property>
<property name="content" type="string" column="content"></property>
<property name="byuserid" type="java.lang.Integer" column="byuserid"></property>
<many-to-one name="user" insert="false" update="false" class="com.blog.bean.User" outer-join="true" column="byuserid" property-ref="id">
</many-to-one>

</class>
</hibernate-mapping>但查询总是出错错误信息:javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: on near line 1, column 56 [from com.blog.bean.Message message left join User user on message.byuserid=user.id where message.byuserid='4']; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1, column 56 [from com.blog.bean.Message message left join User user on message.byuserid=user.id where message.byuserid='4']

解决方案 »

  1.   

    from Message message left join User user on message.byuserid=user.id where message.byuserid=?
    你这个sql语句 完全没必要使用多对一 
    把配置文件中的这个删掉绝对不会报错
    <many-to-one name="user" insert="false" update="false" class="com.blog.bean.User" outer-join="true" column="byuserid" property-ref="id">
    </many-to-one>
    user.hbm.xml中也要配
      

  2.   

    Class:User和Message写法不对,要加@id,@Column等储备才能使用
      

  3.   

    <many-to-one name="user" insert="false" update="false" class="com.blog.bean.User" outer-join="true" column="byuserid" property-ref="id">
    </many-to-one>
    这个属性删掉,好像也不行也是报错
      

  4.   

    <property name="byuserid" type="java.lang.Integer" column="byuserid"></property> 
      这个配置多于
      

  5.   

    <property name="byuserid" type="java.lang.Integer" column="byuserid"></property>  
    这个配置屏蔽也一样 报那个错
      

  6.   

    是不是User用在了xml配置中表名称
      

  7.   

    User.hbm.xml:
    <hibernate-mapping>
    <class name="com.blog.bean.User" table="User">
    <id name="id" type="java.lang.Integer" column="id">
    <generator class="increment"></generator>
    </id>
    <property name="name" type="string" column="name" length="50"></property>
    <property name="password" type="string" column="password" length="50"></property>
    </class>
    </hibernate-mapping>