如何覆盖@MappedSuperclass的子类中的参数

时间:2013-02-26 14:55:54

标签: java hibernate mappedsuperclass

我有一个MappedSuperclass

@MappedSuperclass
public class A{
    .
    .
    .
    @Column(name="something")
    public getSomething(){..};
    public setSomething(){..};
}

我想覆盖子类中的something

@Entity
public class B{
    @Override
    public getSomething(){..};
}

但获得Caused by: org.hibernate.MappingException: Duplicate property mapping of data found例外

我尝试了类似“@AttributeOverride”注释的不同内容,但它没有帮助。

我知道的唯一解决方案是在mappedSuperclass中使something Transient。但我不希望它在这里是暂时的(因为有另一个子类不想覆盖something但希望它是瞬态的)

1 个答案:

答案 0 :(得分:3)

我遇到两个解决方案:一个是打破这个SuperClass并使用Emmbeddeds创建你想要的层次结构。如果你想坚持使用这种方法,我认为你需要在子类中使用@AttributeOverride覆盖属性和类似方法:

@Entity
public class B {

    @AttributeOverride(name = "fred", column = @Column(name = "FRED"))
    private Integer fred;

    @Override
    public Integer getFred() {return fred;}
}