JPA / Hibernate映射简单字符串或任意对象到mysql日期类型?

时间:2011-06-27 02:10:29

标签: hibernate date jpa timezone

我对Hibernate相当新手。我想映射一些对象,让我们说String到一个mysql日期(这是一个没有时间或时区的日期)。我认为这将是相当直接的。但我似乎无法找到一个好的解决方案。

在我的实际应用中,我没有使用String。我想在JSR 310中使用类似LocalDate的东西或我自己的简单月份 - 日期 - 年三元组类型。

我真的......真的不想写一些内部的setter或getter,它将我的简单对象转换为java.sql.Date或java.util.Date,因为:

  1. 使用不必要的代码使域对象膨胀。
  2. 我必须在我的所有域对象中编写相同的代码
  3. 这有点打败了我使用这类课程的整个目的。使用这些类的重点是避免任何可能的时区问题。当我只想要保持一个简单的日期(比如生日日期 - 2005年10月1日)时,引入一个具有时间和时区的类(java.sql.Date或java.util.Date)似乎真的很愚蠢。
  4. 我认为底层问题是JDBC驱动程序可能只能将核心java Date类映射到mysql日期类型???

2 个答案:

答案 0 :(得分:2)

我建议您查看现有的解决方案,看看是否也不能:

  1. 在您自己的代码中使用
  2. 以此为例激励您的代码
  3. http://joda-time.sourceforge.net/contrib/hibernate/index.html

    我个人推荐Joda Time来满足您的时间/日期需求,而且已经有了Hibernate桥接器。除非您使用Joda Time,否则请查看上面的URL,以及hibernate网桥的代码,作为编写转换器的说明。

答案 1 :(得分:0)

由于您的日期列有String,我想除了添加帮助方法进行转换之外没有任何出路。但是,当涉及时区时,最好以毫秒(长)传递日期,这可以很容易地用于创建Date对象。然后可以根据需要应用时区。因此,使用标准的Date类,它具有与mysql日期类型的映射。