【问题标题】:Spring Data JPA: Is it possible to define an entity containing a non-entity object field?Spring Data JPA:是否可以定义包含非实体对象字段的实体?
【发布时间】:2021-01-31 01:05:37
【问题描述】:

是否可以将字段类型指定为实体中的另一个对象,而无需将该对象也指定为实体?
在此示例中,每个块都有一个 Location,其中包含有关该位置状态的各种信息。

@Entity
public class Block {

    @Id
    @GeneratedValue
    private long id;

    private String name;
    private int quantity;
    private double buyPrice;
    private double sellPrice;
    
    @ManyToOne
    private Player player // <-- is another Entity

    private Location location // <-- is not an Entity. Contains various fields regarding the block's location information.

    ...

}

从数据库的角度来看,我希望所有的块数据及其对应的位置数据都在一个表中,因为它是一个一对一的关系,否则会导致不必要的连接和复杂性。

从 OOP 的角度来看,我希望特定于块位置的字段包含在单独的对象中,以便轻松区分块状态和位置状态。

我知道我可以创建 DTO 并以我想要的任何方式映射数据,但我想知道是否有任何方法可以“开箱即用”完成此任务

【问题讨论】:

    标签: spring spring-boot jpa entity


    【解决方案1】:

    看看@Embeddable@Embedded

    【讨论】:

      【解决方案2】:

      这个问题应该从两个方面来理解, 第一种方法应该可以在实体中有对象,但不能在数据库中 下一个方法是它应该在 db 中,而不是在实体中。 所以我们可以在代码中使用@Transient 和@Embeddable。

      JPA 或 Hibernate 中的@Transient 注解用于指示字段不被持久化或忽略字段以保存在数据库中。 @Transient 存在于 javax 中。持久性包。用于标注实体类、映射超类或可嵌入类的属性或字段

      虽然遵循@Embedd 我们必须覆盖属性, 请通过以下链接了解更多信息

      https://www.baeldung.com/jpa-embedded-embeddable

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-03
        • 2015-12-28
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 2020-05-11
        • 2015-09-11
        • 1970-01-01
        相关资源
        最近更新 更多