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

2022-09-04 04:32:31

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

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

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

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

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

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


答案 1

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

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

我们考虑了几种替代方案:

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

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


答案 2

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

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

enter image description here

和转换

enter image description here


推荐