2017-06-29 119 views
2

我正在尝试使用Spring Boot和弹簧数据进行分配。 我有2个实体组织和位置。如何使用弹簧数据保存实体的子实体

1.Organization

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 
) 

我现在用的弹簧数据来坚持database.In正常情况下这个实体只是调用保存(组织org)方法会坚持数据,但我不知道如何将组织数据与位置一起存储。 有人可以帮助我吗?

回答

2

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

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

但是,根据你的表格,我认为这不是你的情况,如果Location只是Organization的一部分并且没有自己的生命周期(只存在于Organization内部)。如果位置的生命周期在Organization以外,它应该是实体(那么实体的ID应为Location),并且您需要OrganizationLocation之间的关系,这取决于您是如何使用的情况,如一对一或多对一以及使用sascade类型位置

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

+0

感谢快速回复! 在我的案例中,位置是组织的一部分,它不会拥有自己的相同存在,但它也是少数其他实体的一部分,例如汽车,人等。所以我认为@Embeddable适用于所有这些情况以及? –

+0

是的,它适用。我写了关于位置的@entity,就像在常见情况下一样:)我们从开始时的Embeddable开始,在几个月后移动到独立实体,那时候,我们有很多数据重复的位置。 – xyz

+0

几个其他的实体,如汽车,人等 - 考虑创建具有位置的基类并从中延伸,如果它是可以接受的 – xyz

相关问题