当前位置:编程学习 > JAVA >>

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
--------------------编程问答-------------------- 我的例子是我遇到的问题的一个缩影。
问题重点是:我存入master的时候master.myPet的值是Dog类的实例。但是取出来的时候却不是了,因为取出来之后master.myPet不能强转为Dog类型 --------------------编程问答-------------------- 存入数据库的时候master.myPet的类型是Dog
再取出来的时候是 master.myPet 的类型是Pet_$$_javassist_0
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,