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

Advance 2013-12-10 09:49:25
?

@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类的实例),而不是只根据属性的声明类型来赋值。






...全文
164 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Advance 2013-12-10
  • 打赏
  • 举报
回复
存入数据库的时候master.myPet的类型是Dog 再取出来的时候是 master.myPet 的类型是Pet_$$_javassist_0
Advance 2013-12-10
  • 打赏
  • 举报
回复
我的例子是我遇到的问题的一个缩影。 问题重点是:我存入master的时候master.myPet的值是Dog类的实例。但是取出来的时候却不是了,因为取出来之后master.myPet不能强转为Dog类型
  • 打赏
  • 举报
回复
private String type = this.getClass().getSimpleName();这样获取的必然是当前类的名字,父类的要getSuperclass().getSimpleName()才行,子类中要重写type

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧