java - 尝试在休眠中获取结果集时出现强制转换异常“无法将'java.lang.Object []'转换为”
问题描述
在我的应用程序中,我使用 Hibernate 3.3 进行数据连接。当我试图通过本机查询获取结果集时,它会引发Cannot cast 'java.lang.Object[]' to org.model.Term
异常。
模型类:
@Entity
@Table(name = "term")
public class Term {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name = "version")
private long versionId;
@Column(name = "name")
private String name;
@Column(name = "created_date")
private Date createdDate;
}
道法:
@Repository
@Transactional
public class TermsDao {
private static final String findLatestQuery = "select * from term WHERE version = (select max(version) from term)";
@PersistenceContext
private EntityManager entityManager;
@Transactional(readOnly = true)
public Term findLatestTerm() {
Query query = entityManager.createNativeQuery(findLatestQuery);
return (Term) query.getSingleResult();
}
}
持久性配置:
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.model.Term</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<!--<property name="hibernate.hbm2ddl.auto" value="update"/>-->
</properties>
</persistence-unit>
表结构:
Field Type Key Extra
version bigint(20) PRI auto_increment
name varchar(255)
created_date datetime
当query.getSingleResult();
被评估时,结果就在那里。
query.getSingleResult().getClass() returns `[Ljava.lang.Object;`
什么可能导致此问题?
解决方案
EntityManager.createNativeQuery(String sqlString)用于 UPDATE 和 DELETE 语句:
如果查询不是更新或删除查询,则查询执行将导致 SQL 结果的每一行作为 Object[] 类型的结果返回(如果选择列表中只有一列,则返回 Object 类型的结果。 )
改用createNativeQuery(String sqlString, Class resultClass),即:
Query query = entityManager.createNativeQuery(findLatestQuery, Term.class);
推荐阅读
- r - 如何从 shinyWidget 更改 airDatepicker 中日历图标的大小?
- node.js - `variables` 在 `graphql-subscriptions` withFilter 函数中如何工作?
- php - PHP 使用 $_GET 获取包含变量的 URL
- php - PHP 联系表返回 500 内部错误
- javascript - 如何将我的 Webpack/Vue 代码拆分为单独的 vendor.js 文件并将其从 app.js 中删除?
- tensorflow - Keras VAE 的输入尺寸不正确
- php - 我是否以正确的方式使用 Auraphp 进行依赖注入?
- xslt - WiX 安装程序:使用 xslt 和 heat.exe 如何在找到父/子匹配后更改父 ID 的值?
- angular-material - Material Angular 8:没有主要内容时,抽屉内容消失
- java - 在 Java 中持续高效地写入文件