我可以在@Entity中使用泛型类型吗?

时间:2016-12-12 07:46:13

标签: hibernate jpa

我正在定义通用的@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();
}
}

1 个答案:

答案 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;
        }
    }