14

在我的项目中,我必须在某个地方unitOfIssue使用Items. 现在,各种项目当然可以有不同的表示单位。因此,我正在寻找一些 API 或某种方式来优雅地处理这种情况。

是否有任何可用的 API 提供某种方式来表示这些单位?我听说过JScience,这似乎令人印象深刻,但我再次面临将其映射到JPA. 经过一些谷歌工作,我发现在这种情况下正在进行一些工作 - JScience-JPA,但在生产中使用它似乎还不稳定。

我还发现了一些关于JSR-275 的信息,但是从这个 JCP 页面看来它已经被拒绝了。

然后我遇到了unitofmeasure,我还没有深入研究它。但是,同样的问题又来了。这可以用 JPA 映射吗?

编辑: -这个 SO question我遇到了带有 Unit 的 Java Numbers,但我不知道它是否已准备好生产。

我真的很困惑,特别是在看到上面的那些选项之后。JPA 是一个额外的问题,即我是否可以使用它们中的任何一个。有没有人遇到过这样的情况,并找到了解决办法?我真的需要一些帮助。我应该使用什么?如果没有其他出路,那么代表这些单位的适当方式是什么。我看到的一种方法是使用enums. 但是,当然,这将是最后的选择。

4

2 回答 2

4

我在一个项目中广泛使用了 JSR-275(在它被 JCP 拒绝之前)。最初我们没有使用 JPA,但后来决定我们应该使用 JPA 2.0 来持久化我们的模型,我不得不处理测量对象的持久性。

这可能不是您问题的答案,但可能会为讨论带来一些有趣的想法。

我们考虑了几种选择:

  1. 度量是可序列化的,JPA 可以映射任何可序列化的对象。这里的问题是度量值将作为二进制对象保存在数据库中,并且它们会受到序列化(即版本控制等)的所有问题的影响。
  2. 如果我们同意对每个单位使用国际计量单位,我们可以通过将数据保留为原始类型(即整数、双精度等)来调整我们的模型。因此,字段将基于 JPA 支持的类型,但 getter 和 setter 将使用度量对象。将 JPA 映射配置为基于字段,而不是属性。这里的问题是必须在不影响域对象的公共接口的情况下更改模型以更改封装数据。
  3. 由于我们使用 hibernate 作为我们的持久性提供者,我们可以接受偏离 JPA 标准并使用hibernate 自定义值类型将度量对象映射到相应的原始类型。然后我们可以为此目的使用休眠注释映射我们的类型。(请参见此处的示例)。这个警告是失去持久性供应商独立性。

我们最终使用了替代方案#3,它对我们来说效果很好。

于 2013-01-10T08:17:13.783 回答
1

我建议你自己写。可能您也可能需要Unit Of Measure Conversion

从ARTS 零售数据模型逻辑视图定义 UOM

在此处输入图像描述

和转换

在此处输入图像描述

于 2013-01-10T07:46:56.027 回答