【问题标题】:Do we need Hibernate mapping In this scenario?在这种情况下我们需要 Hibernate 映射吗?
【发布时间】:2012-07-01 21:03:43
【问题描述】:

我是休眠新手。请帮帮我。

我有 2 个名为 Employee 和 Country 的表。我需要用选定的国家/地区保存 E​​mployee。在我的情况下,我将无处取回员工详细信息并将其显示在 UI 上。我需要维护 Employee 和 Country 对象之间的映射(onetoone mapping)吗?我不能直接保存选定国家的员工吗?

我可以在我的 Employee 域对象中执行以下操作吗?如果不能,请告诉我这方面的潜在问题?

@column(name="countryId")

private int countryId;

【问题讨论】:

  • 是的,您可以在您的员工域对象中执行此操作。如果您不需要 Country 对象,为什么要创建一个?只要确保您保留正确的数据成员即可。它应该是国家 ID,还是名称或缩写更好?它应该是 Employee 的一部分,还是更明智的 Address 对象的一部分?
  • 如果您从不使用员工,为什么还要存储他们?
  • 由于其他应用程序需要员工详细信息,所以我通过我的应用程序保存它。(我只是为了便于理解而采用了员工,它不完全是员工)

标签: hibernate hibernate-mapping


【解决方案1】:

我相信您在这里可能有几个选择。

  1. 您可以将country 原语完全排除在您的域类之外。如果您不需要它,则没有理由告诉 Hibernate 获取它。
  2. 如果您根本不打算修改它,将其映射到您的域类中并应用@Transitive 注释可能会得到您想要的。这告诉 Hibernate,关于 Country ID 的任何内容都不需要在数据库级别持久化。

这两种方法都有助于确保employee 对象和国家/地区ID 之间的引用完整性。不过,我建议使用第一个。如果您根本没有理由需要国家 ID,请不要将其作为对象的一部分。

如果您确实需要在背面使用国家/地区 ID 来建立关系,我建议您确保包含此

@Column(name = "country", insertable = "false", updatable = "false").  

这使您可以获取国家/地区 ID,而不必担心您会意外覆盖它。

希望有帮助!

【讨论】:

    【解决方案2】:

    是的,您可以将 countryId 放入您的员工对象中。但如果你不 那么将来需要国家对象,这没有任何意义 保存国家对象。

    如果您正在为未来开发这些东西并且可能会 将来需要,但现在不是更好的保存国家对象。

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多