将时间对象保持为实体而不是值类型?

时间:2010-11-15 16:30:17

标签: java hibernate wrapper factory jodatime

我正在使用Joda Time DateTime来处理日期和时间。我使用jodatime hibernate code中捆绑的PersistentDateTime类来持久存在此类对象。

我有大量的DateTime对象集合,我现在以下面的方式持久化它们(后面是一个hibernate映射文件的摘录):

<set name="validInstants" sort="natural">
     <key column="myobject_id"/>
     <element column="date" type="myproject.utilities.hibernate.types.PersistentDateTime"/>
 </set>

这样做,即将DateTimes存储为值类型,我在表validInstants中获得了许多重复元素,其中有数十万个。 我想避免这种情况,并在validInstants表中提供所需的DateTimes,每个值存储一次。我怎样才能做到这一点?

据我所知(我和Hibernate初学者)实现这一目标的唯一方法是创建一个包装DateTime的类并将其映射为实体,再创建一个返回始终相同的DateTime-wrapper的工厂当要求相同的日期。 这是做我想要的最好方法吗?建议?

1 个答案:

答案 0 :(得分:0)

此处存储的实体与validInstants集之间的关系究竟是什么?实体是否“拥有”validInstants? validInstants的成员是否在该实体之外有任何使用或生命被宣布为其中的一部分?

如果没有,那么我认为将非实体视为一个实体是没有任何意义的(如果你“创建一个包装DateTime并将其映射为一个类的类,那么这就是你要做的事情”。实体“)。

我不担心在存储这些日期的表中有许多重复元素,除非它被证明是一个大问题。通过myobject_id列的索引,这些查找应该足够快。

相关问题