ORA-00932: 不一致的数据类型: 预期 - 得到 clob 休眠/弹簧启动

Posted

技术标签:

【中文标题】ORA-00932: 不一致的数据类型: 预期 - 得到 clob 休眠/弹簧启动【英文标题】:ORA-00932: inconsistent datatypes: expected - got clob hibernate/springboot 【发布时间】:2019-05-10 12:13:10 【问题描述】:

使用 hibernate w/oracle 提取记分牌数据,其中包含存储为 base64 LOB 的头像图像。我做了一些研究,似乎所有其他类似的帖子都是人们试图通过区分或将其放在 where 子句中与 CLOB 数据进行比较。我还阅读了 oracle 不支持临时表(视图)中的 CLOB,如果是这种情况,我该如何从数据库中获取数据。仅供参考,代码在内存数据库中的 H2 中工作。

查询抛出错误:

select distinct score.userId as userId, sum(score.totalScore) as totalScore, 
    sum(score.timeTaken) as timeTaken, user.image as image
from Score score, User user
where score.userId = user.userId
group by score.userId order by totalScore desc, timeTaken asc

实体:

用户:

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "id_Sequence2")
@SequenceGenerator(name = "id_Sequence2", sequenceName = "ID_SEQ2")
@Column(name = "id", updatable = false, nullable = false)
int id;
int userId;
@Lob
String image;
Date createdDate;
Date lastLoggedIn;

得分:

@Id
@Column(name = "quizID", updatable = false, nullable = false)
int quizId;
@Id
@Column(name = "userID", updatable = false, nullable = false)
int userId;
double totalScore;
@OneToMany(targetEntity=UserQuizRecord.class, fetch=FetchType.EAGER, cascade =  CascadeType.ALL )
List<UserQuizRecord> userQuizRecords;
int timeTaken;
int correctAns;
Date takenDate;

【问题讨论】:

如果 base 64 字符串的长度小于 4000 字节,您应该能够使用 to_char 将它们转换为标准字符串。否则,如果您无法让 Hibernate 重组查询(我根本不知道 Hibernate),那么也许您可以在Score 上创建一个视图,每个userID 给出一行。 Oracle 在临时表和视图中都支持 CLOB。 【参考方案1】:

检查此链接。

https://forum.hibernate.org/viewtopic.php?f=1&t=998284

据此,DISTINCT 不能与CLOB 数据类型即image 一起使用。请检查这是否解决了您的问题。

【讨论】:

我没有使用 distinct with image 吗?我在 Score 表中的第一个 select 语句中使用它。然后将视图与用户表正确连接? 如果是这种情况,我该如何加入 userID 上的表【参考方案2】:

我没有解决确切的问题,但我使用的解决方法(虽然不理想但有效)是我在 1 个查询中得到了除图像数据之外的所有内容,然后对图像数据进行了另一个查询并将图像连接到之后视图结束。我只查询前 100 个结果,所以这不是对资源的征税。

【讨论】:

以上是关于ORA-00932: 不一致的数据类型: 预期 - 得到 clob 休眠/弹簧启动的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00932: 不一致的数据类型: 预期 - 得到 CLOB

如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -

ora-00932 不一致的数据类型预期数字得到 char plsql

ORA-00932: 不一致的数据类型: 预期 - 得到 clob 休眠/弹簧启动

无法选择 *(ORA-00932:不一致的数据类型:预期的 CHAR 得到了 ADT)

查找错误 ORA-00932:不一致的数据类型:预期的 DATE 得到了 NUMBER