是否有任何可用的API来代表各种单位的项目,如KG,升,米,KM等

时间:2013-01-10 07:07:12

标签: java jpa units-of-measurement jscience

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

是否有可用的API,它提供了一些表示这些单位的方法?我听说JScience看起来很令人印象深刻,但我再次面临在JPA中映射它的另一个问题。在一些谷歌工作之后,我发现在这种情况下正在进行一些工作 - JScience-JPA,但似乎在生产中使用它还不稳定。

我也发现了一些关于JSR-275的内容,但是从this JCP page开始,它似乎被拒绝了。

然后我遇到unitsofmeasure,我还没有深入细节。但是,同样的问题也来了。可以用JPA映射吗?

编辑: - 来自this SO question我遇到了Java Numbers with Unit,但我不知道它是否已准备就绪。

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

2 个答案:

答案 0 :(得分:4)

我参与了一个项目,我们广泛使用了JSR-275(之前被JCP拒绝)。最初我们没有使用JPA,但后来我们决定使用JPA 2.0来保持我们的模型,并且我必须处理我的测量对象的持久性。

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

我们考虑了几种选择:

  1. 度量是可序列化的,JPA可以映射任何可序列化的对象。这里的问题是这些措施将被保存为数据库中的二进制对象,并且它们会受到序列化(即版本控制等)的所有问题的影响。
  2. 我们可以通过将数据保持原始类型(即整数,双数等)来调整我们的模型,条件是我们同意对每个单元使用国际计量单位。因此,字段将基于JPA支持的类型,但getter和setter将使用measure对象。将JPA映射配置为基于字段,而不是属性。这里的问题是必须更改模型以更改封装数据,而不会影响域对象的公共接口。
  3. 由于我们使用hibernate作为持久性提供程序,我们可以接受偏离JPA标准并使用hibernate custom value types将度量对象映射到相应的原始类型。然后我们可以使用hibernate注释来映射我们的类型。 (See an example here)。这一点的警告是失去持久性供应商的独立性。
  4. 我们最终使用了替代#3,它对我们来说效果很好。

答案 1 :(得分:1)

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

ARTS Retail Data Model Logical View

中UOM的定义

enter image description here

和转换

enter image description here