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 hibernate:如何选择表中的所有行_Java_Mysql_Sql_Hibernate_Postgresql - Fatal编程技术网

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

Java hibernate:如何选择表中的所有行,java,mysql,sql,hibernate,postgresql,Java,Mysql,Sql,Hibernate,Postgresql,我尝试使用Hibernate执行类似于Select*fromLogEntry的操作。 插入作品: import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; [...] protected EntityManager manager; protected final String tableName =

我尝试使用Hibernate执行类似于
Select*fromLogEntry
的操作。 插入作品:

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();
}
但当我尝试使用此方法获取插入值时: 公共日志列表getAll(){

manager.getTransaction().begin();
Query Query=manager.createNativeQuery(“从“+tableName+”;”中选择*”;
ArrayList条目=(ArrayList)query.getResultList();
manager.getTransaction().commit();
返回新的日志列表(条目);
}
我总是有例外:
java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为de.motza.entities.LogEntry

我知道问题在于将查询结果强制转换为对象,但我找不到如何正确地强制转换对象,或者如何从表中获取多行

有人有什么建议吗? 如果需要,我可以发布persistence.xml和更多代码“问题”是,您发送的本机查询将返回一个Object[]数组,每个dolumn有一个值。您不需要调用本机查询,但需要调用hibernate查询,例如

manager.createQuery(“从日志条目中选择l”);


例如,请参见。

对于初学者,您应该尝试利用HQL,Hibernate查询语言。在上面给出的示例中,您正在尝试执行本机SQL查询。获得
ClassCastException
的原因是本机查询绕过了框架并返回了原始的
对象而不是你想要的那种

尝试将此代码用于您的
选择*

String hql = "from LogEntry";
Session session = entityManagerFactory.openSession();
Query query = session.createQuery(hql);
List<LogEntry> logEntries = query.list();      // no ClassCastException here
String hql=“from LogEntry”;
会话会话=entityManagerFactory.openSession();
Query=session.createQuery(hql);
List logEntries=query.List();//此处没有ClassCastException

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

Query query = manager.createNativeQuery("SELECT * FROM " + tableName + ";");
query.setResultTransformer(Transformers.aliasToBean(LogEntry.class))
ArrayList<LogEntry> entries = (ArrayList<LogEntry>) query.getResultList();
Query Query=manager.createNativeQuery(“从“+tableName+”;”中选择*”;
query.setResultTransformer(Transformers.aliasToBean(LogEntry.class))
ArrayList条目=(ArrayList)query.getResultList();
据我所知,getResultList()为您提供了一个列表…而不是通用列表。因此,如果您想获得通用列表,必须使用

TypedQuery<Person> 
这是我得到信息的链接

我对Hibernate了解不多。我希望这会对您有所帮助。

您可以使用
session.createCriteria(MyEntity.class).list();
比如说

ref:

列表列表=null;
TypedQuery query=sessionfactory.openSession().createQuery(“从您的表名”);
list=query.getResultList();

yourTableName
可以是您的
@Entity

您使用了哪个版本的hibernate?请尝试以下查询Query=manager.createNativeQuery(“SELECT*FROM”+tableName+“;”,LogEntry.class);List entries=Query.getResultList();hibernate entityManager 4.3.8.最后,请查看下面给出的答案。Transformers.aliasToBean()来自何处?方法createCriteria(类)现在不推荐使用SharedSessionContract类型。虽然这不是用户想要的,但这肯定是有益的信息。这是给我的。感谢您的回答@Tim Biegeleisen:)
TypedQuery<Person> 
Query
List<String> list = null;

TypedQuery<String> query = sessionfactory.openSession().createQuery("from yourTableName");

list = query.getResultList();