[英]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.