日期:2014-05-18  浏览次数:20645 次

hibernate 高手来帮忙看一下,关于继承映射之后的查询问题
?

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "Pet")
public class Pet{
     private String type = this.getClass().getSimpleName();
}


@Entity
@DiscriminatorValue(value = "Dog ")
public class Dog extends Pet{
     private String asdf;
}


@Entity
public class Master{
    private Pet  myPet;
}



我数据库表里有一条狗狗的数据。

在 Pet表里有一行数据 , type 字段的值是“Dog“
在 Dog表里有一行数据 , asdf字段的值是”sds“.

问题重点:
取到Master的实例后我把Master的 myPet强转为 Dog类型 的时候出错了。
经过调试发现原因是:Master的myPet属性值是 Pet类的实例,而不是 Dog类的实例;
怎样可以实现让hibernate根据表里的type字段给myPet属性赋值对应的子类实例(例如这里我就希望hibernate赋值给myPet属性的值是Dog类的实例),而不是只根据属性的声明类型来赋值。







------解决方案--------------------
private String type = this.getClass().getSimpleName();这样获取的必然是当前类的名字,父类的要getSuperclass().getSimpleName()才行,子类中要重写type