Spring Data JPA:是否可以定义包含非实体对象字段的实体?

Spring Data JPA: Is it possible to define an entity containing a non-entity object field?

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

@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.

    ...

}

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

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

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

查看 @Embeddable@Embedded

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

JPA或Hibernate中的@Transient注解用于表示一个字段不被持久化或忽略字段保存到数据库中。 @Transient 存在于 javax.持久性包。它用于注释 属性 或实体 class 的字段、映射的超 class 或可嵌入的 class

在跟随@Embedd 时我们必须覆盖属性, 请仔细阅读下面的 link 以获得更清楚的信息

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