簡體   English   中英

如何在 java Z91F1F487C7FB763BF84FEZB3EB9 中的抽象 class 和具體 class 之間創建實體關系

[英]How to create an entity relationship between an abstract class and a concrete class in a java spring-boot app?

例如,當我有以下課程時

@Getter
@Setter
@NoArgsConstructor
@MappedSuperclass
public class BaseEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public BaseEntity(Long id) {
        this.id = id;
    }
}

@Getter
@Setter
@NoArgsConstructor
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
//@MappedSuperclass
public abstract class Artwork extends BaseEntity {

    @Column(name = "name")
    private String name;

    @ManyToOne
    @JoinColumn(name = "style_id")
    private Style style;

    //  private ARTIST TODO;

    public Artwork(Long id, String name, Style style) {
        super(id);
        this.name = name;
        this.style = style;
    }

    public abstract int calculateCost();
}

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "styles")
public class Style extends BaseEntity {

    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "artwork")
//    @JoinTable("artwork_id")
    private List<Artwork> artwork;
}

在我的項目中,我將擁有不同類型的藝術品,並且每個藝術品都有一個Style 所以起初,我的Artwork class 是一個@MappedSuperClass ,但是在遇到錯誤並進行了一些谷歌搜索之后,我了解到為了能夠通過Artwork定義關系,我必須將其設為@Entity並將@Inheritance注釋添加到獲得與@MappedSuperClass類似的功能(如果我錯了,請糾正我)。

但是現在我仍然無法得到我想要的,因為在Style中必須有一個表名@JoinTable 那么,有沒有辦法實現我正在嘗試的目標? 或者這樣做只是一種不好的做法? 我是否應該分別指定每個關系(將每個Artwork類型作為屬性寫入Style並將關系分配給它們)?

TABLE_PER_CLASS inheritance 策略無法實現您想要的,因為您不能 model 對 SQL 中的多個表進行 model。 您可以改用JOINED inheritance 策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM