是否有任何可用的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来保持我们的模型,并且我必须处理我的度量对象的持久性。
这可能不是您问题的答案,但可能会为讨论带来一些有趣的想法。
我们考虑了几种选择:
- 度量是可序列化的,JPA可以映射任何可序列化的对象。 这里的问题是测量将被保存为数据库中的二进制对象,并且它们将受到序列化的所有问题(即版本控制等)。
- 如果我们同意对每个单元使用国际计量单位,我们可以通过将数据保持原始类型(即整数,双数等)来调整我们的模型。 因此,字段将基于JPA支持的类型,但getter和setter将使用measure对象。 将JPA映射配置为基于字段,而不是属性。 这里的问题是必须更改模型以更改封装数据,而不会影响域对象的公共接口。
- 由于我们使用hibernate作为持久性提供程序,因此我们可以接受偏离JPA标准并使用hibernate自定义值类型将度量对象映射到相应的原始类型。 然后我们可以使用hibernate注释来映射我们的类型。 ( 见这里的例子 )。 这一点的警告是失去持久性供应商的独立性。
我们最终使用了替代#3,它对我们来说效果很好。
我建议你自己写。 可能您也可能需要Unit Of Measure Conversion
。
从ARTS零售数据模型逻辑视图定义UOM
和转换