【问题标题】:(N)Hibernate: core/master mappings with relationships(N)Hibernate:具有关系的核心/主映射
【发布时间】:2008-12-17 18:43:26
【问题描述】:

我正在一家中型公司开始工作,主要负责编写与其 ERP 系统交互的自定义​​应用程序。这是我第一次做这种工作,所以 ERP 概念对我来说是新的,我正在学习它。

到目前为止,我只编写了两个应用程序,并且学习了数据库模型,并且只学习了完成工作所需的量,但即使数量有限,我也可以开始看到大局的形成。然后我的想法是编写一个库,其中存储了所有映射/模型对象,以便新应用程序可以引用这个库。之后,每个应用程序将创建自己的存储库,将访问权限限制为只访问他们需要的内容和有意义的视角。

我遇到的问题是如何处理 (N)Hibernate 映射中的关系。如果我有一个在此基础库中映射的具有完整关系的订单对象,则没有什么能阻止某人永远旅行这些关系(假设我是唯一的程序员......)。因此,从这个意义上说,使用存储库作为一种范围限制根本行不通。

如果我限制此订单对象的 (N)Hibernate 映射中的关系,则存储库会返回一个订单对象,该对象仅绑定其范围所需的关系。缺点是我现在必须为每个项目创建映射,而不是只有一个“映射存储”。

其他人如何处理这个问题?

有点不相关,但我也一直在将可能由多个关系组成的 (N)Hibernate 持久对象翻译成一种更适合特定应用程序的单一非持久对象(通常受用户界面)。这是一个常见的事情,还是我通过获取返回的对象并将它们转换为其他东西来丢弃 (N)Hibernate 的一些好处?

ps。关于 DDD 标签...我不知道这是否是 DDD 详细介绍的内容,但我确实订购了这本书。不过,在本书到达之前,我不确定是否有好的资源可供查看。

【问题讨论】:

    标签: nhibernate hibernate dns domain-driven-design


    【解决方案1】:

    相当老的问题。我猜你已经找到了答案,但万一……

    我看到了两种解决问题的方法。

    1. 通过数据库中的用户帐户限制表访问。例如在 mysql 中,您可以这样做。缺点是如果您的所有域类都映射并编译到您的 nh dll 中,程序员仍然可以看到这些实体。如果他/她试图访问它,它会触发一个异常(nh试图访问一个数据库表,数据库拒绝)。

    2. 为每个案例创建一个 dll。但我想您可能还需要创建多个帐户。

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多