java - 如何使用spring-data保存实体的子实体

标签 java spring-boot spring-data

我正在尝试使用 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 data 将此实体持久保存在数据库中。在正常情况下,只需调用 save(Organization org) 方法即可持久保存数据,但我不确定如何存储组织数据和位置。 有人可以帮我解决这个问题吗?

最佳答案

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

您的组织是@Entity,应用程序应该是@Embeddable(因为没有 id ,并且它是Organization 表的一部分)。

但是,如果位置只是组织的一部分并且没有自己的生命周期(仅存在于组织内部),那么根据您的表,我认为这不是您的情况。如果位置在Organization之外有生命周期,它应该是实体(那么对于实体来说应该是Location的id)并且您需要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

关于java - 如何使用spring-data保存实体的子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823923/

相关文章:

java - 分页 - 使用 Spring Data JPA 访问第二页时出现 UnsupportedOperationException

java - 子 selectOneMenu JSF 1.2 的错误填充值

java - 需要帮助以在发生 slider 更改时停止计时器

java - Java中如何让线程池在不同的核心上运行作业?

java - 如何在 Java 中使用 wkhtmltopdf 或 wkhtmltoImage 将 HTML 字符串转换为 PDF?

java - 在 Spring Boot 应用程序上使用 Flyway 时如何在 H2 中加载初始数据?

java - Spring-Data-Jpa Repository - 实体列名上的下划线

java - 没有唯一索引字段的 SQL 更新字段

java - 假装和未声明的 404 Not Found 可抛出异常

spring-boot - Spring Boot 和 Spring Data Moore 发布