Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.QueryException:无法解析属性_Java_Jpa - Fatal编程技术网

Java org.hibernate.QueryException:无法解析属性

Java org.hibernate.QueryException:无法解析属性,java,jpa,Java,Jpa,这是我第一次使用JPA。我用Java和JPA编写代码。我的代码如下 String queryStr = "SELECT m.title, b.isbn, b.authors"; queryStr += " FROM Book b, Media m"; queryStr += " WHERE m.MediaID = b.MediaID"; queryStr += " AND b.isbn = '" + isbn + "' AND m.title = '%"

这是我第一次使用JPA。我用Java和JPA编写代码。我的代码如下

 String queryStr = "SELECT m.title, b.isbn, b.authors";
    queryStr += " FROM Book b, Media m";
    queryStr += " WHERE m.MediaID = b.MediaID";
            queryStr += " AND b.isbn = '" + isbn + "' AND m.title = '%" + title +"%'"; 
Query query = em.createQuery(queryStr);
从我的代码中,类书扩展了类媒体

但我得到的错误是

org.hibernate.QueryException:无法解析属性:MediaID of:mediaManagement.Media[从mediaManagement.Book b、mediaManagement.Media m中选择m.title、b.isbn、b.authors,其中m.MediaID=b.MediaID]

这是媒体课

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "Media")
@NamedQuery(name = "findAllMedias", query = "select b from Media b")
public class Media {

@Id
@Column(name = "MediaID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int mediaID;

/**
 * Getter of the property <tt>mediaID</tt>
 * 
 * @return Returns the mediaID.
 * @uml.property name="mediaID"
 */
public int getMediaID() {
    return mediaID;
}

/**
 * Setter of the property <tt>mediaID</tt>
 * 
 * @param mediaID
 *            The mediaID to set.
 * @uml.property name="mediaID"
 */
public void setMediaID(int mediaID) {
    this.mediaID = mediaID;
}

/**
 * @uml.property name="title"
 */
@Column(name = "title")
private String title;

/**
 * Getter of the property <tt>title</tt>
 * 
 * @return Returns the title.
 * @uml.property name="title"
 */
public String getTitle() {
    return title;
}

/**
 * Setter of the property <tt>title</tt>
 * 
 * @param title
 *            The title to set.
 * @uml.property name="title"
 */
public void setTitle(String title) {
    this.title = title;
}

/**
 * @uml.property name="editionDate"
 */

private Calendar editionDate;

/**
 * Getter of the property <tt>editionDate</tt>
 * 
 * @return Returns the editionDate.
 * @uml.property name="editionDate"
 */
public Calendar getEditionDate() {
    return editionDate;
}

/**
 * Setter of the property <tt>editionDate</tt>
 * 
 * @param editionDate
 *            The editionDate to set.
 * @uml.property name="editionDate"
 */
public void setEditionDate(Calendar editionDate) {
    this.editionDate = editionDate;
}

/*
 * Two medias are equal if their mediaID is the same
 */
@Override
public boolean equals(Object media) {
    if (media == null)
        return false;
    Media b = (Media) media;

    if (b.mediaID == mediaID)
        return true;

    return false;
}

public Media() {
};

/**
 * Creates a media All parameters should be given
 * 
 * @param title
 *            the title of the media
 * 
 * @param editionDate
 *            date of the edition of the media
 * 
 * @throws BadParametersException
 */
public Media(String title, Calendar editionDate)
        throws BadParametersException {
    if ((title == null) || (editionDate == null))
        throw new BadParametersException();

    this.title = title;
    this.editionDate = editionDate;

}

/**
 * Returns a description of the media
 */
public String toString() {
    return this.title + "  " + String.valueOf(this.title);
}

/** 
 * @uml.property name="copies"
 * @uml.associationEnd multiplicity="(0 -1)" inverse="media:copyManagement.Copy"
 */
@OneToMany(mappedBy="mediaRef") protected Set<Copy> copies;

public void addCopy(Copy copy) {
    copies.add(copy);
}

/** 
 * Getter of the property <tt>copies</tt>
 * @return Returns the copies.
 * @uml.property name="copies"
 */
public Set<Copy> getCopies() {
    return copies;
}

/** 
 * Setter of the property <tt>copies</tt>
 * @param editionDate The copies to set.
 * @uml.property  name="copies"
 */
public void setCopies(Set<Copy> copies) {
    this.copies = copies;
}
这是书本课

@Entity
@Table(name = "Book")
@NamedQuery(name = "findAllBooks", query = "select b from Book b")
public class Book extends Media {
/**
 * @uml.property name="authors"
 */
@Column(name = "authors")
private ArrayList<String> authors;

/**
 * Getter of the property <tt>authors</tt>
 * 
 * @return Returns the authors.
 * @uml.property name="authors"
 */
public ArrayList<String> getAuthors() {
    return authors;
}

/**
 * Setter of the property <tt>authors</tt>
 * 
 * @param authors
 *            The authors to set.
 * @uml.property name="authors"
 */
public void setAuthors(ArrayList<String> authors) {
    this.authors = authors;
}

/**
 * @uml.property name="isbn"
 */

@Column(name = "isbn")
private String isbn;

/**
 * Getter of the property <tt>isbn</tt>
 * 
 * @return Returns the isbn.
 * @uml.property name="isbn"
 */
public String getisbn() {
    return isbn;
}

/**
 * Setter of the property <tt>isbn</tt>
 * 
 * @param isbn
 *            The isbn to set.
 * @uml.property name="isbn"
 */
public void setisbn(String isbn) {
    this.isbn = isbn;
}

public Book() {
    // TODO Auto-generated constructor stub
}

public Book(String title, Calendar editionDate, ArrayList<String> authors,
        String isbn) throws BadParametersException {
    super(title, editionDate);
    this.authors = authors;
    this.isbn = isbn;
    // TODO Auto-generated constructor stub
}

}

有人可以帮忙吗?

如果book扩展了media,为什么要加入media表?尽管使用Book和Media类以及映射会更容易


查询Book对象就足够了。也可能MediaId应该是MediaId。Hibernate对其属性名称区分大小写。

您可以发布问题中的Media和Book类,以及映射文件(如果使用)吗?实际上,我忘了添加和,其中m.MediaID=b.MediaID