如何为类似的表制作一个模型?

时间:2017-04-12 10:37:43

标签: spring hibernate

我在DB中有几个类似的表。
现在我用于每个表自己的模型和存储库 但我认为,这不是正确的决定 我可以为所有类似的表创建一个模型和存储库吗?

@Entity
@Table(name = "BEDROOM", schema = "public")
public class BedroomModel extends AllFinishProductModel{

    @Column(name = "PHOTO")
    private String photo;
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column
    private String name;
    @Column(name = "DESCRIPTION")
    private String description;
    @Column(name = "STRUCTURE") //organza, curtain ....
    private String structure;
    @Column(name = "PAINT") //abstraction, geometric  ....
    private String paint;
    @Column(name = "HEIGHT")
    private String height;
    @Column(name = "COLOR")
    private String color;
    @Column(name = "QUANTITY")
    private Double quantity;
    @Column(name = "PRICE")
    private BigDecimal price;
    @Column(name = "SEWED")
    private String itIsSewed;
    ... getters and setters
}

我有一个类似的表:CABINET,GUESTROOM,CHILDREN_ROOM,KITCHEN,CURTAIN和TULLE。
应该将哪些代码用于存储库? 我试图在https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html中找到问题的答案
但我在这里找不到答案。

您能提供建议,如何制作或链接吗?

1 个答案:

答案 0 :(得分:1)

您可以在父类上使用带有@MappedSuperclass注释的实体继承来获取子类/表中的公共属性。

因此,例如,您有一个具有公共属性的父Room实体,您可以使用@MappedSuperclass进行注释。

@MappedSuperclass
public class Room {
    @Column
    private String name;
    @Column(name = "DESCRIPTION")
    private String description;
    // some more common properties
}

和混凝土房间,例如:

@Entity
public class Bedroom extends Room
{
    // common properties will be inherited
    private Bed bed;
    private NightLamp nightLamp;
}

现在,重要的是Room未映射为任何表格。房间是虚拟的"表,它不存在于db中。只有具体实体以表格形式存在,例如Bedroom

这里有官方javadoc的链接: http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html