以下のコードに示すように、TestAuthorとTestBookの2つのハイバネートクラスがあります。私はテーブルにいくつかのレコードを挿入し、それらは正常に挿入されました。レコードが正式に挿入されたことを確認するために、私は次の SQLがリストをテーブル名にキャストする方法
SELECT * from TESTAUTHOR;
SELECT * from afk_owner.TestBook;
コマンドを使用、私は以下のPRINTALLセクションに示されているHibernateのコマンドを使用して、テーブルtestbookの内容を表示するようになりましたします。私がメソッドを実行するとPrintAll例外が表示されます。
cannot be cast to msc.hibernate.persistence.TestBook
なぜ私はこのエラーを解決し、解決するのですか?
PRINTALL:
private void printAll() {
for (TestBook book : (List<TestBook>) HibernateUtil.getCurrentSession().createSQLQuery("SELECT * from afk_owner.testbook").list()) {
System.out.println(book.getmISBN() + ", " + book.getmTitle() + " " + (book.getAuthor()));
}
}
TestAuthor:
@Entity @Table(schema = "afk_owner", name = "testauthor")
public class TestAuthor {
@Id
@Column(name = "authorid")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequencegen")
@SequenceGenerator(name = "sequencegen", sequenceName = "afk_owner.testauthor_seq", allocationSize = 1)
private Integer mAuthorID;
@Column(name = "FNAME")
private String mFName;
@Column(name = "LNAME")
private String mLName;
@OneToMany(mappedBy = "author")
private List<TestBook> books;
public Integer getmAuthorID() {
return mAuthorID;
}
public void setmAuthorID(Integer mAuthorID) {
this.mAuthorID = mAuthorID;
}
public String getmFName() {
return mFName;
}
public void setmFName(String mFName) {
this.mFName = mFName;
}
public String getmLName() {
return mLName;
}
public void setmLName(String mLName) {
this.mLName = mLName;
}
public TestAuthor() {
// TODO Auto-generated constructor stub
}
}
TestBook:
@Entity @Table(schema = "afk_owner", name = "testbook")
public class TestBook {
@Id
@Column(name = "ISBN")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequencegen")
@SequenceGenerator(name = "sequencegen", sequenceName = "afk_owner.testbook_seq", allocationSize = 1)
private Long mISBN;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "authorid")
private TestAuthor author;
@Column(name = "title")
private String mTitle;
public Long getmISBN() {
return mISBN;
}
public void setmISBN(Long mISBN) {
this.mISBN = mISBN;
}
public TestAuthor getAuthor() {
return author;
}
public void setAuthor(TestAuthor author) {
this.author = author;
}
public String getmTitle() {
return mTitle;
}
public void setmTitle(String mTitle) {
this.mTitle = mTitle;
}
public TestBook() {
// TODO Auto-generated constructor stub
}
}
CreatSQLQueryと一致するように答えを変更してください。 – user2121
@ user2121 nope申し訳ありませんが、提供されたリンクを使用して自分で試してみるか、JPAに切り替えるかHQLを使用する必要があります。 – Antoniossss