今後の使用のために汎用の@MappedSuperclassを定義しています。私の経験では、すべてのカテゴリに同じコードがあります。次に、私は一般的なカテゴリと複数のサブクラスを作成できると思います。しかし、休止状態は子をフェッチすることはできず、PageCategoryを更新することはできません。私はそれが無効であるか、または休止状態のバグであることを知る必要がありますか?@Entityでジェネリック型を使用できますか?
@MappedSuperclass
@Cacheable
public abstract class Category<T extends Category> {
private Integer id;
private String name;
private T parent;
private List<T> children;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Transient
public T getParent() {
return parent;
}
public void setParent(T parent) {
this.parent = parent;
}
@Transient
public List<T> getChildren() {
return children;
}
public void setChildren(List<T> children) {
this.children = children;
}
}
@Entity
@Table(name = "pageCategory")
public class PageCategory extends Category<PageCategory> implements Serializable {
@ManyToOne
@Override
public PageCategory getParent() {
return super.getParent();
}
@OrderBy("name asc")
@OneToMany(mappedBy = "parent")
@Override
public List<PageCategory> getChildren() {
return super.getChildren();
}
}
投稿した内容は、そのフィールドがルートに一時的(永続的ではない)であり、サブクラスで永続的になりたいことを示唆しています。これが何を意味するのかを確認してください。ジェネリックの使用はJPAモデルで可能でなければなりません –
@NeilStockton私はいくつかのサブクラスが親子継承を無視できると思います。私の場合、PageCategoryはgetterメソッドをオーバーライドします。 – hurelhuyag
あなたの質問は、サブクラスで使用するときにTRANSIENTアノテーションをオーバーライドできると思ったら、ジェネリックスやあなたと関係することとは何の関係もありません。おそらくあなたの質問を書き換えて –