java org.hibernate.QueryException: 无法解析属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10776625/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
org.hibernate.QueryException: could not resolve property
提问by user1412944
This is the first time that I use JPA. I write the code with Java and JPA. My code is below.
这是我第一次使用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);
From my code, Class Book extends class Media.
根据我的代码,Class Book 扩展了 Media 类。
But I got the error which is
但我得到的错误是
org.hibernate.QueryException: could not resolve property: MediaID of: mediaManagement.Media [SELECT m.title, b.isbn, b.authors FROM mediaManagement.Book b, mediaManagement.Media m WHERE m.MediaID = b.MediaID ]
org.hibernate.QueryException: 无法解析属性:MediaID of: mediaManagement.Media [SELECT m.title, b.isbn, b.authors FROM mediaManagement.Book b, mediaManagement.Media m WHERE m.MediaID = b.MediaID ]
This is the Media class.
这是媒体类。
@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;
}
And this is Book class.
这是书籍类。
@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
}
}
Anyone can help?
任何人都可以帮忙吗?
回答by Matt
If book extends media, why are you joining with the Media table? (though it would be easier with the Book and Media classes and mappings)
如果书扩展了媒体,为什么要加入媒体表?(尽管使用 Book 和 Media 类和映射会更容易)
Querying the "Book" object should be enough. Also perhaps "MediaId" should be "mediaId". Hibernate is case sensitive on it's property names.
查询“Book”对象就足够了。也许“MediaId”应该是“mediaId”。Hibernate 的属性名称区分大小写。