我有一個像這樣定義的基本抽象類:
@MappedSuperclass
public abstract class State implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "stateCode")
private String code;
}
諸如StateA, StateB...之類的具體類StateZ是這樣定義的:
@Entity
@Table(name = "stateA")
public class StateA extends State implements serializable{
}
還有一個Region像這樣的類:
@Entity
@Table(name = "region")
public class Region {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private int id;
@Column(name = " regionCode")
private String regionCode;
}
每個具體State類都參考Region資料庫中的類。但是,我正在努力OneToMany在 Region 類中進行這樣的映射:
@OneToMany(mappedBy = "region", cascade= cascadeType.ALL)
private Set<State> state = new HashSet<>()
以及抽象類中的以下ManyToOne映射:State
@ManyToOne
@JoinColumn(name = "regionId")
private Region region;
但它不起作用,因為它State是一個未映射的物體。有沒有一種方法可以State在類中進行具體的通用映射Region而不必宣告每個具體類?
uj5u.com熱心網友回復:
我認為問題出在這里:
@OneToMany(mappedBy = "region", cascade= CascadeType.ALL)
private Set<State> state = new HashSet<>();
您不能使用 @OneToMany 關聯到 List of State 類,因為它不是物體。您應該使用繼承自 State 類的物體集合。
如果您將上面的代碼更改為該代碼,我認為您的代碼會很好:
@OneToMany(mappedBy = "region", cascade= CascadeType.ALL)
private Set<StateA> state = new HashSet<>();
uj5u.com熱心網友回復:
你應該改變繼承策略,我建議你使用單表策略,所以我認為你應該將你的“狀態”類轉換為:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class State implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private int id;
@Column(name = "stateCode")
private String code;
@ManyToOne
@JoinColumn(name = "regionId")
private Region region;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424557.html
