Hibernate Transient扩展问题

时间:2010-04-08 08:13:24

标签: java hibernate orm jpa

@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()上出现的瞬态注释......并且不应该在数据库中创建一个列...

如果您需要澄清,请告诉我....

对此非常感谢....

谢谢

2 个答案:

答案 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字段本身上,而不是放在方法上。