gpt4 book ai didi

java - Hibernate:用户类型与字段/属性访问

转载 作者:行者123 更新时间:2023-12-02 00:14:53 24 4
gpt4 key购买 nike

Java Persistence with Hibernate一书中,讨论了使用UserType的以下用例:

我们需要在数据库中存储货币金额,但用户可以使用任何货币。因此,我们在将金额存储到数据库之前将其“标准化”为美元,并使用 UserType 实现在存储之前将金额转换为美元,并在从数据库读取之后但之前将金额转换为用户指定的货币将其返还给用户。

我可以想到另外两种方法来做到这一点:

1) 使用 Hibernate 的字段访问来存储/读取数据库,并使用公共(public) getter/setter 进行转换,

2) 为 Hibernate 创建一对将使用 USD 的私有(private) getter/setter,以及为用户进行必要转换的公共(public) getter/setter。

这些方法与使用 UserType 相比如何? UserType 还有其他优点吗?

最佳答案

作为一般经验法则,我会说 UserType 适合相当技术性的问题,而模型中的代码应该关注域问题。

伊莫 User Types in Hibernate显示了一些关于技术转换问题的好示例,例如 int-to-Date 等,这些示例很好地放置在 UserType 中。

关于您提供的货币示例,我想说它很大程度上取决于具体场景,UserType 是否合适。货币转换问题可能会变得非常复杂,我宁愿认为这些是领域问题,因此将相应的代码放入模型中,而不是将其隐藏在 UserType 中。

上面示例中的UserType可能存在的缺点:

  • 它忽略了转化率的动态特性。考虑一个银行应用程序:当我的帐户余额为 75 欧元时,我实际上拥有欧元金额,而不是在给定时间点转换为美元的欧元金额。当欧元兑美元汇率下跌时,我的美元就会减少,反之亦然。

可能的优势:

  • 您可以轻松地在查询级别进行比较,例如查找金额最高/最低的记录。

关于java - Hibernate:用户类型与字段/属性访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12048484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com