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

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

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

我也发现了一些关于JSR-275的东西,但是从这个JCP页面看来它似乎已经被拒绝了。

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

编辑: –从这个SO问题,我遇到了带有Unit的Java Numbers,但我不知道它是否已准备就绪。

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

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

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

我们考虑了几种选择:

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

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

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

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

在此处输入图像描述

和转换

在此处输入图像描述