@MappedSuperclass
public abstract class BaseAbstract implements Serializable{
private static final long serialVersionUID = 1L;
protected String test = //some random value;
public String getTest() {
return test;
}
public void setTest(String test){
this.test = test;
}
}
@Entity
public class Artist extends BaseAbstract
{
private static final long serialVersionUID = 1L;
private Integer id;
@override
@Transient
public String getTest() {
return test;
}
.....
}
我的问题是......当我试图对艺术家进行任何操作时,除了id和名称之外,测试也会得到保存,但不应该是这样......
如果我在baseabstract类getTest()方法上添加相同的瞬态,我看到测试列没有被创建(理想情况下它应该发生)但是如果我尝试通过在子类中添加注释来覆盖该方法,则会创建测试栏......
我不知道为什么会发生这种情况,因为当hibernate创建艺术家对象并检查注释时,它应该会看到艺术家方法的getTest()上出现的瞬态注释......并且不应该在数据库中创建一个列...
如果您需要澄清,请告诉我....
对此非常感谢....
谢谢
答案 0 :(得分:4)
当您将Parent类标记为@MappedSuperclass时,您说的是
为每个子类保留其属性
由于您的父类是抽象(您无法实例化抽象类),请执行以下操作
@MappedSuperclass
public abstract class BaseAbstract implements Serializable {
@Transient
public String getTest() {
}
}
如果您不想保留子类getTest属性,请再次执行
@Entity
public class Artist extends BaseAbstract {
@Transient
public String getTest() {
}
}
别的!
答案 1 :(得分:2)
我建议将@Transient
放在protected String test
字段本身上,而不是放在方法上。