Java 将时间项目作为实体而不是值类型持久化?
我用Joda Time DateTime来处理日期和时间。我使用绑定在中的类PersistentDateTime来持久化这类对象 我有大量的DateTime对象集合,目前我以以下方式保存它们(下面是hibernate映射文件的摘录):Java 将时间项目作为实体而不是值类型持久化?,java,hibernate,wrapper,factory,jodatime,Java,Hibernate,Wrapper,Factory,Jodatime,我用Joda Time DateTime来处理日期和时间。我使用绑定在中的类PersistentDateTime来持久化这类对象 我有大量的DateTime对象集合,目前我以以下方式保存它们(下面是hibernate映射文件的摘录): 这样做,即将DateTimes存储为值类型,我会在validInstants表中获得许多重复的元素,数十万个我希望避免这种情况,并在validInstants表中存储所需的日期时间,每个值存储一次。我怎样才能做到这一点 据我所知(我是和Hibernate初学者
这样做,即将DateTimes存储为值类型,我会在validInstants表中获得许多重复的元素,数十万个我希望避免这种情况,并在validInstants表中存储所需的日期时间,每个值存储一次。我怎样才能做到这一点
据我所知(我是和Hibernate初学者),实现这一点的唯一方法是创建一个封装日期时间并将其映射为实体的类,再加上创建一个工厂,当请求相同的日期时,它总是返回相同的日期时间包装器。
这是做我想做的事情的最好方法吗?建议 此处存储的实体与
validInstants
集合之间的关系到底是什么?实体是否“拥有”有效期?validInstants
的成员在其声明为其一部分的实体之外是否有任何用途或生命
如果不是这样,那么我认为将非实体视为实体没有任何意义(如果您“创建一个封装日期时间并将其映射为实体的类”,那么您就会这样做)
我不会担心存储这些日期的表中有许多重复的元素,除非证明这是一个大问题。通过在
myobject\u id
列上建立索引,这些查找应该足够快。validInstants成员,即DateTime,可以被许多其他对象使用,就像我引用日期“2001-01-01”一样。我指的是那一天,但如果我没有一个中心工厂,那么同一天会创建许多不同的对象。看起来“时间瞬间”的概念可以看作是一个整体。我目前存储了约8000个不同的日期时间,总共约250000个。例如,当加载所有这些值时,会出现一个问题:它比加载8000行而不是250000行要慢(我的内存中有250000个对象而不是8000个),但是你真的确定它要慢很多吗?您是否对这两个选项进行了基准测试?像您今天使用的元素的目的是,您不必担心非实体的实体生命周期决策。当然,您可以将“即时”视为一个实体,并创建一个包含所有可能即时的表。但你为什么要这么做?datetime在实体之外有什么值?我怀疑你是在试图建立一个“即时”数据库。
<set name="validInstants" sort="natural">
<key column="myobject_id"/>
<element column="date" type="myproject.utilities.hibernate.types.PersistentDateTime"/>
</set>