【问题标题】:What is the preferred way to store coordinates (x,y) in Hibernate?在 Hibernate 中存储坐标 (x,y) 的首选方法是什么?
【发布时间】:2017-05-23 07:27:37
【问题描述】:

我正在创建一个服务,用户可以在其中存储一些坐标。 (int x, int y)。

这些坐标是另一个对象的一部分,比如说Person

class Person {
    String name;
    Coordinates coordinates;
}

class Coordinates {
    int x;
    int y;
}

Coordinates 对象仅在某些上层上下文中是必需的 - 在此示例中它是 Person,但有时它可能是 PlaceCompany。单独的 Coordinates 对象完全没用。

问题是:如何将这些数据存储在关系数据库中。我应该使用生成的键创建关系,还是将其作为逗号分隔的字符串存储在上部对象中?

有什么好的推荐方法?

【问题讨论】:

    标签: java hibernate orm relational-database


    【解决方案1】:

    问题是:如何将这些数据存储在关系数据库中。应该 我使用生成的密钥创建关系,或者将其存储为 上层对象内的逗号分隔字符串?

    在 DBMS 方面,当您可以定义两个可以以独立方式操作的概念时,将表分成两部分可能会很有趣。
    你解释说坐标实体本身是完全没用的,这不是你的情况。

    当两个概念混合了很多属性,但它们之间没有直接关系并且您不想将它们耦合到同一个表中时,拆分也可能很有趣,因为这在阅读和可维护性方面是不可取的.
    仍然不是这种情况,因为坐标只有两个属性。 例如,对于 Person-Address(一对一)关系,它会更有意义。

    因此,为坐标引入一个特定的表格可能会带来更多的弊端。

    现在在 Java 对象方面,在 Person 类中有一个 Coordinates 字段是有意义的,因为您可以将它作为一个对象进行操作,而不仅仅是作为一组单独的属性。

    JPA 的 Embeddable 和 Embedded 机制允许将实体定义为另一个实体的一部分,同时将所有实体映射到单个物理表。

    指定要作为嵌入实体包含的实体,并在包含它的实体中将字段指定为嵌入实体。

    @Embeddable
    class Coordinates{
        int x;
        int y;
    }
    
    @Entity
    class Person{
        String name;
        @Embedded
        Coordinates coordinates;
    }
    

    【讨论】:

      【解决方案2】:

      单独的坐标对象是完全没用的。

      从这一行你应该开始考虑嵌入,而且我看不出一个对象如何被重用到一个地方,因为坐标的细微差别会产生一个新的实例,

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多