【发布时间】:2015-10-13 13:04:27
【问题描述】:
我尝试用 Hibernate 做类似Select * from LogEntry 的事情。
插入工作正常:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
[...]
protected EntityManager manager;
protected final String tableName = "LogEntry";
public DatabaseImpl(DB_TYPE db) {
this.db = db;
if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
entityManagerFactory.close();
}
entityManagerFactory = Persistence.createEntityManagerFactory(db.getPersUnit());
manager = entityManagerFactory.createEntityManager();
}
public void insert(LogEntry entry) {
manager.getTransaction().begin();
manager.persist(entry);
manager.getTransaction().commit();
}
但是当我尝试使用这种方法获取插入的值时: 公共 LogEntryList getAll() {
manager.getTransaction().begin();
Query query = manager.createNativeQuery("SELECT * FROM " + tableName + ";");
ArrayList<LogEntry> entries = (ArrayList<LogEntry>) query.getResultList();
manager.getTransaction().commit();
return new LogEntryList(entries);
}
我总是得到异常:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to de.motza.entities.LogEntry
我知道问题在于将查询结果转换为对象,但我找不到任何地方如何正确转换对象,或如何从表中获取多行。
有人有什么建议吗? 如果需要,我可以发布我的 persistence.xml 和更多代码
【问题讨论】:
-
你用的是哪个版本的hibernate?
-
试试这个 Query query = manager.createNativeQuery("SELECT * FROM " + tableName + ";", LogEntry.class); List
条目 = query.getResultList(); -
休眠 entityManager 4.3.8.Final
-
请查看下面给出的答案。
标签: java mysql sql hibernate postgresql