gpt4 book ai didi

java - hibernate :如何选择表中的所有行

转载 作者:可可西里 更新时间:2023-11-01 07:13:19 25 4
gpt4 key购买 nike

我尝试使用 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();
}

但是当我尝试使用此方法获取插入的值时: 公共(public) 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;无法转换为 de.motza.entities.LogEntry

我知道问题出在将查询结果转换为对象,但我无法在任何地方找到如何正确转换对象,或者如何从表中获取多行数据。

有人有什么建议吗?如果需要,我可以发布我的 persistence.xml 和更多代码

最佳答案

因为您使用了nativeQuery,所以您需要使用setResultTransformer 方法传输结果。

Query query = manager.createNativeQuery("SELECT * FROM " + tableName + ";");
query.setResultTransformer(Transformers.aliasToBean(LogEntry.class))
ArrayList<LogEntry> entries = (ArrayList<LogEntry>) query.getResultList();

关于java - hibernate :如何选择表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31583737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com