【问题标题】:How to save a sub-entity of an entity using spring-data如何使用spring-data保存实体的子实体
【发布时间】:2017-06-29 11:30:25
【问题描述】:

我正在尝试使用 Spring Boot 和 spring-data 进行分配。 我有 2 个实体组织和位置。

1.组织

public class Organization {
    private Long id;
    private String name;
    private Location location;
}

public class Location {
    private Double lattitude;
    private Double longitude;
}

而我的数据库表是这样的:

CREATE TABLE organization (
    id int primary key,
    organization_name varchar(255),
    organization_location_lat double,
    organization_location_long double
)

现在我正在使用 spring 数据将这个实体保存在数据库中。在正常情况下,只需调用 save(Organization org) 方法即可保存数据,但我不确定如何将组织数据与位置一起存储。 有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: java spring-boot spring-data


    【解决方案1】:

    实体有一个身份。 Embeddables 没有自己的身份,只能使用拥有实体进行查询。

    你的组织是@Entity lication 应该是@Embeddable(因为没有 id ,它是Organization 表的一部分)。

    但是,根据您的表格,我认为这不是您的情况,如果 Location 只是 Organization 的一部分并且没有自己的生命周期(仅存在于组织内部)。如果 Location 在 Organization 之外有生命周期,它应该是实体(然后应该是 Location 的 id 作为实体),并且您需要 OrganizationLocation 之间的关系,取决于您使用的大小写方式,例如 one-一对一或多对一并使用扫射类型进行定位

    public class Organization {
        @Id
        private Long id;
        @Column
        private String name;
        @Embedded
        private Location location;
    }
    
    @Embeddable
    public class Location {
        private Double lattitude;
        private Double longitude;
    }
    

    参见示例https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/domain/embeddables.html

    【讨论】:

    • 感谢您的快速回复!!在我的情况下,位置是组织的一部分,它不会独立存在,但它也将是少数其他实体的一部分,例如汽车、人等。所以我认为@Embeddable 适用于所有这些情况好吗?
    • 是的,它适用。我在常见情况下写了关于位置的@entity :) 我们一开始就从 Embeddable 开始,几个月后,我们得到了单独的实体,在那一刻,我们有很多重复的位置数据。
    • 很少有其他实体,例如汽车、人等 - 如果您可以接受,请考虑使用位置创建基类并从其扩展
    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多