17:12:02,609  INFO QueryCache:39 - starting query cache at region: net.sf.hibernate.cache.QueryCache 
net.sf.hibernate.QueryException: could not resolve property: authorid of:
无法识别authorid属性.
还有你写的HQL语句到底想查询什么内容

解决方案 »

  1.   

    其实也没查询出什么内容,我只是想做个测试.authorid是Publication表的字段,与person和author里的id对应.
      

  2.   

    我才学的,但是你的sql好相有问题的呀
      

  3.   

    sql??我没写sql语句呀,上面的hql可能粘的时候少了一句:(select publication from Publication as publication,Author as author,Person as person where publication.authorid=author.id and publication.authorid=person.id
      

  4.   

    再把你的hibernate 的映射类也贴出来看看
      

  5.   

    最近也在搞HIBERNATE的的学习,个人觉得用它给数据库添加删除真的挺方便,但是查询,尤其是多表关联的查询,真是挺烦,要做很多配置,不知大家怎么觉得?
      

  6.   

    Author.hbm.xml
    =======
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="com.javamodel.hibernate.Author" table="author">
    <id name="id" column="id">
    <generator class="foreign">
    <param name="property">person</param>
    </generator>
    </id>
    <property name="alias" column="alias"/>
    <one-to-one name="person" class="com.javamodel.hibernate.Person" cascade="all" constrained="true"/>
    <set name="publications" lazy="true" inverse="true" cascade="all">
    <key column="authorid"/>
    <one-to-many class="com.javamodel.hibernate.Publication"/>
    </set>
    <set name="works" table="author_work">
    <key column="author_id"/>
    <many-to-many column="work_id" class="com.javamodel.hibernate.Work"/>
    </set>
    </class>
    </hibernate-mapping>=======person.hbm.xml
    =======
    <?xml version="1.0"?> 
    <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > 
    <hibernate-mapping> 
       <class name="com.javamodel.hibernate.Person" table="person"> 
          <id name="id"> 
              <column name="id" length="40"/> 
             <generator class="uuid.hex"/> 
          </id> 
          <property name="name" column="name" /> 
          <property name="email" column="email" /> 
       </class> 
    </hibernate-mapping>
    =======Publication.hbm.xml
    =======
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="com.javamodel.hibernate.Publication" table="publication">
    <id name="id" column="id">
    <generator class="uuid.hex"/>
    </id>
    <property name="bookName" column="bookname"/>
    <property name="dataTime" column="datatime"/>
    <many-to-one name="author" column="authorid"/>
    </class>
    </hibernate-mapping>
    =======Work.hbm.xml
    =======
    <?xml version="1.0"?>
    <!DOCTYPE  hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="com.javamodel.hibernate.Work" table="work">
    <id name="id" column="id">
    <generator class="uuid.hex"/>
    </id>
    <property name="title" column="title"/>
    <set name="authors" table="author_work" inverse="true">
    <key column="work_id"/>
    <many-to-many column="author_id" class="com.javamodel.hibernate.Author"/>
    </set>
    </class>
    </hibernate-mapping>
    =======
    author.java--------
    package com.javamodel.hibernate;import java.util.HashSet;
    import java.util.Set;
    /**
     * 
     * @hibernate.class
     *  table="author"
     *  dynamic-update="true"
     * dynamic-insert="true"
     * 这个类对应的表是author
     */public class Author {
    private String id;
    private String alias=null;
    private Person person=null;
    private Set publications=new HashSet();
    private Set works = new HashSet();

    /**
     * 
     * @hibernate.property
     * length="20"
     * 声明表中对应的字段
     */
    public String getAlias() {
    return alias;
    }

    /**
     * 
     * @hibernate.id
     *  unsaved-value="null" generator-class="foreign"
     *  定义外键
     * @hibernate.generator-parm
     *   name="property" value="person"
     *   对应的Author对应的属性
     */ public String getId() {
    return id;
    } /**
     * 
     * @hibernate.one-to-one
     * cascade="all" constrained="true"
     * 在Author与Person之间,声明one-to-one的关联关系
     */
    public Person getPerson() {
    return person;
    } /**
     * @param string
     */
    public void setAlias(String string) {
    alias = string;
    } /**
     * @param string
     */
    public void setId(String string) {
    id = string;
    } /**
     * @param person
     */
    public void setPerson(Person person) {
    this.person = person;
    } /**
     * 
     * @hibernate.set
     * lazy="true" inverse="true" cascade="all"
     * 定义Hibernate<set>collection
     * @hibernate.collection-key
     * column="authorid"
     * 对应表中的字段
     * @hibernate.collection-one-to-many
     * class="com.javamodel.hibernate.Publication"
     * 在Author与Publication之间,声明one-to-many的关联关系
     */
    public Set getPublications() {
    return publications;
    } /**
     * @param set
     */
    public void setPublications(Set set) {
    publications = set;
    } /**
     * 
     * @hibernate.set
     * lazy="true"
     * table="author_work"
     * @hibernate.collection-key
     * @column="author_id"
     * @hibernate.collection-many-to-many
     * column="work_id"
     * class="com.javamodel.hibernate.Work"
     */
    public Set getWorks() {
    return works;
    } /**
     * @param set
     */
    public void setWorks(Set set) {
    works = set;
    }}--------Person.java---------
    package com.javamodel.hibernate;
    public class Person {
    private String id = null; 
    private String name = null; 
    private String email = null;  /**
     * @return
     */
    public String getEmail() {
    return email;
    } /**
     * @return
     */
    public String getId() {
    return id;
    } /**
     * @return
     */
    public String getName() {
    return name;
    } /**
     * @param string
     */
    public void setEmail(String string) {
    email = string;
    } /**
     * @param string
     */
    public void setId(String string) {
    id = string;
    } /**
     * @param string
     */
    public void setName(String string) {
    name = string;
    }}---------Publication.java
    ---------
    package com.javamodel.hibernate;public class Publication {
       private String id = null; 
       private String bookName = null; 
       private String dataTime = null; 
       private String authorId = null; 
       private Author author = null; /**
     * @return
     */
    public Author getAuthor() {
    return author;
    }/**
     * @return
     */
    public String getAuthorId() {
    return authorId;
    }/**
     * @return
     */
    public String getBookName() {
    return bookName;
    }/**
     * @return
     */
    public String getDataTime() {
    return dataTime;
    }/**
     * @return
     */
    public String getId() {
    return id;
    }/**
     * @param author
     */
    public void setAuthor(Author author) {
    this.author = author;
    }/**
     * @param string
     */
    public void setAuthorId(String string) {
    authorId = string;
    }/**
     * @param string
     */
    public void setBookName(String string) {
    bookName = string;
    }/**
     * @param string
     */
    public void setDataTime(String string) {
    dataTime = string;
    }/**
     * @param string
     */
    public void setId(String string) {
    id = string;
    }}---------Work.java
    --------
    package com.javamodel.hibernate;import java.util.HashSet;
    import java.util.Set;
    public class Work {

    private String id=null;
    private String title=null;
    private Set authors=new HashSet(); /**
     * @return
     */
    public Set getAuthors() {
    return authors;
    } /**
     * @return
     */
    public String getId() {
    return id;
    } /**
     * @return
     */
    public String getTitle() {
    return title;
    } /**
     * @param set
     */
    public void setAuthors(Set set) {
    authors = set;
    } /**
     * @param string
     */
    public void setId(String string) {
    id = string;
    } /**
     * @param string
     */
    public void setTitle(String string) {
    title = string;
    }}-------
      

  7.   

    不是你这样用的,many-to-many 需要一个中间表,你的中间表呢?
    象你的需求,
    person<-one-to-one->author 
    author<-ont-to-many->publication 
    再好实现不过了,自己去看hibernate的文档吧,上面有例子
      

  8.   

    to sankxuan(似水流年) :
    我的又不是many-to-many?为什么要中间表呢?hibernate的文档看过N遍了,说说你是怎么实现的,OK?
      

  9.   

    看看你的这个错误
    net.sf.hibernate.QueryException: could not resolve property: authorid  
    在看看你这两段配置:
    <set name="publications" lazy="true" inverse="true" cascade="all">
    <key column="authorid"/>
    <one-to-many class="com.javamodel.hibernate.Publication"/><many-to-one name="author" column="authorid"/>
    看出问题了么?