【发布时间】:2021-12-12 14:50:29
【问题描述】:
我在 java 中有以下 HQL 查询
try (Session context = HibernateUtil.getLocalSessionFactory().openSession()) {
List list = null;
String queryText = "select rf.Name, to_char(rf.StartDateTime,'YYYY/MM/DD HH24:MI:SS'), rf.Duration from RecordFile as rf";
var query = context.createQuery(queryText);
list = query.list();
}
var query = context.createQuery(queryText.toString());
类型有:
rf.Name -> Character varying (20),
rf.StartDateTime -> Timestamp without time zone,
rf.Duration -> Time without time zone
我需要将三个字段中的每一个都读取为字符串。 名称是字符串。 StartDateTime 通过 to_char 方法转换为 String。但我无法将持续时间字段转换为字符串。持续时间在 DB 中显示为 00:05:08,即 00 小时 05 分 08 秒。
有人知道吗?
谢谢
更新
其实还有一个类
public MyClass
{
MyClass(String name, String startDateTime, String Duration)
{
.
.
.
}
}
查询输出调用这个类。这就是为什么我需要将 Date 转换为 String 并且不允许更改 DB。
主要的queryText是:
String queryText = "select new PackageName.MyClass(rf.Name, to_char(rf.StartDateTime,'YYYY/MM/DD HH24:MI:SS'), rf.Duration) from RecordFile as rf";
【问题讨论】:
-
为什么要将数据作为字符串检索?更喜欢将
timestamp without time zone获取到LocalDateTime和time without time zone到LocalTime(后者有点可疑,在这种情况下我们更喜欢Duration,但Hibernate 可能不支持)。跨度> -
我已经更新了我的问题。谢谢
-
天哪,从数据库中检索字符串并将日期和时间作为 Java 模型中的字符串处理。您组织中的某个人不喜欢让事情变得简单。 :-( 你还在字符串中存储数字和布尔值吗?;-)
-
@OleV.V.好吧,如果日期/时间处理和处理发生在数据库中而不是 Java 模型中,这可能是有意义的。也许后者只是处理演示。他们确实以(几乎)正确的原生类型存储日期/时间和持续时间。
-
这是一个老项目,故事太复杂了。我们在 C# 端使用输出作为 Web 服务响应,而不是 java 模型 :(。例如 dateTime 作为字符串传输到 C# 并且 DateTime.Parse(string-datetime-value) 将转换为 DateTime 类型。
标签: java postgresql time timezone hql