我正在定义通用的@MappedSuperclass以供将来使用。根据我的经验,所有类别都有相同的代码然后我想我可以创建泛型类和多个子类。但是hibernate无法获取子级而无法更新PageCategory。我需要知道它是无效的还是休眠的bug?
@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();
}
}
答案 0 :(得分:0)
可以将泛型与@Entity一起使用,但在您的情况下,您不需要泛型类。
重写的方法可能具有更具体的返回类型。也就是说,只要新的返回类型可以分配给您要覆盖的方法的返回类型。
public class A {
public A get(){
return null;
}
public List<? extends A> list(){
return null;
}
}
public class B extends A{
@Override
public B get() {
return null;
}
@Override
public List<B> list(){
return null;
}
}