具有一对一映射实体的属性

时间:2019-04-23 10:31:28

标签: java hibernate jpa

如何在拥有实体中包含一对一映射实体属性的某些(或全部)属性。

我已经创建了一个示例来考虑该问题:

@Data // Lombok's to contain all getter and setters
@Entity
@Table(name = "room")
public class Room {

    @Column
    int length;

    @Column
    int breadth;
}

@Data // Lombok's to contain all getter and setters
@Entity
@Table(name = "dance_room")
public class DanceRoom {

    @Column
    int numberOfPeople;

    @OneToOne
    Room room;
}

现在,我希望DanceRoom实体在该实体中也具有length属性,但它们不应位于dance_room数据库表中。

我认为是的直接解决方案是:

@Data // Lombok's to contain all getter and setters
@Entity
@Table(name = "dance_room")
public class DanceRoom {

    @Column
    int numberOfPeople;

    @OneToOne
    Room room;

    public int getLength() {
        return room.length;
    }

}

是否可以在DanceRoom JPA实体中创建那些属性,并将列保留在room数据库表中?

或者还有其他方法可以创建这种映射吗?

1 个答案:

答案 0 :(得分:1)

根据实体名称和访问数据的方式,我建议使用 Inheritance

有人会说关系数据库没有继承。是的,但是一般来说,JPA和ORM工具允许我们将这些关系映射到数据库。

JPA inheritence strategies

只需将 Room 实体设置为 DanceRoom 实体的父级,只需遵循先前的链接即可。