在视图中强制BigInt为INTEGER

时间:2016-06-09 18:01:51

标签: java mysql hibernate view

我有一个Alarm表,其中包含设备列,严重性和过时的标志以及在CASE语句中生成其中一列的视图。我们的想法是,同一设备的许多警报将被组合在一起,并且它们的overallSeverity将是非过时警报的最大严重性,或者如果它们都被标记为过时则将是最低严重性(1)。

以下是我的尝试:

(CASE
    WHEN (SUM(`al`.`OBSOLETE`) = COUNT(`al`.`ALARM_ID`)) THEN 1
    ELSE (SELECT 
            MAX(`al`.`SEVERITY`)
        FROM
            `alarm` `al`
        WHERE
            (`al`.`OBSOLETE` <> 1))
END) AS `overallSeverity`,

哪个可以正常工作,并在MySQL Workbench中提供所需的结果

问题是我使用hibernate从这个视图中选择并在网页上显示这些组,而Java代码期望overallSeverity是一个int,而SQL似乎默认它是一个BigInt。

以下情况有效但并不总是返回所需的overallSeverity值,如果它们中没有一个实际上是最低值:

WHEN SUM(al.OBSOLETE) = COUNT(al.ALARM_ID) THEN min(al.severity)

在这种情况下,如果组中的最低严重性为2,则当然返回为overallSeverity,但如果所有都已过时,我们希望始终显示1。

有没有办法强制视图返回该列的INTEGER?警报中的严重性列类型为int(1),因此我基本上试图保留它。

0 个答案:

没有答案
相关问题