gpt4 book ai didi

java - 如何将 JodaTime 与 Spring 和 Hibernate 一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:18 26 4
gpt4 key购买 nike

所以我在我的 Spring 应用程序中遇到了问题。用户可以使用日期选择器工具输入日期,这些日期使用 Hibernate 存储在 Mysql 数据库中。该表使用日期字段来存储它们,因此不会节省时间。问题是服务器设置为 GMT,而我们的用户是 EST 或 GMT-5。所以日期被正确地存储在数据库中,但是当它显示在前端时,它总是显示以前的日期。惹恼了我,因为我没有节省时间,但显然它仍在影响事情。无论如何,12/10/2001 将在前端显示为 12/09/2011。我已经调查过了,不允许我将服务器更改为 EST,所以我现在正在研究用 Jodatime 解决这个问题(除非有人认为我正在做其他事情来导致这个问题)或更简单的解决方案.

我的问题是我找不到任何关于如何将 Jodatime 与 Spring 结合使用的有用信息。目前我只是试图将一个对象从使用 java 的 Date 更改为使用 joda 的 LocalDate。无论我尝试什么,当它试图从数据库中提取日期对象并将其插入 LocalDate 对象时,我都会收到关于“无效流 header ”和“无法反序列化”的错误。

有人可以为我提供一些指导,让我知道我需要做些什么来存储和检索,这样它才能工作吗?

我正在使用带有注释和所有这些好东西的 Spring 3.1。我很乐意提供代码,但由于我不确定要做什么,所以我真的没有任何我认为有用的代码。我真的可以在从 JSP 到数据库再返回的整个过程中使用一些帮助。我认为我不确定的主要事情是如何将其存储在服务器上,我认为这就是我遇到 Hibernate 错误的原因。正如我提到的,数据库正在使用日期,因此不存储时间。如何将 LocalDate 转换成这个?

如果有帮助,这里是一些代码:

领域对象

@Entity
public class Provision {
@Id @GeneratedValue
private Long id;

private LocalDate startDate;

//Getters and setters
}

我有一个 DatePropertyEditor 用于在 JSP 和 Spring 之间将文本转换为日期:

public class DatePropertyEditor extends PropertyEditorSupport {
@Override
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("yyyy-MM-dd").parse(value));
} catch (ParseException e) {
setValue(null);
}
}

@Override
public String getAsText() {
if(getValue() != null)
return new SimpleDateFormat("yyyy-MM-dd").format((Date) getValue());
else
return null;
}

}

这里是一些输入数据的 JSP:

<td align="right">Start Date:</td>
<td><sf:input path="startDate" dojoType="dijit.form.DateTextBox" required="true" hasDownArrow="true"
onChange="dijit.byId('endDate').constraints.min = arguments[0];" constraints="{datePattern:'MMM d, y'}" />
</td>

其余代码均未处理或接触 Date 对象,所有其余代码均通过注释和注入(inject)等方式处理。

最佳答案

我建议您使用 Spring 3 Converter SPI而不是常规的 PropertyEditors。

然后只需编写一个自定义转换器:

final class StringToDateTime implements Converter<String, DateTime> {
private static final DateTimeFormatter FORMAT = // init here

public DateTime convert(String source) {
return FORMAT.parseDateTime(source);
}

}

但这只是 Spring 方面。您仍然必须确保 Hibernate 知道 JodaTime。看看 Joda Time - Hibernate support项目。

关于java - 如何将 JodaTime 与 Spring 和 Hibernate 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com