先贴代码
/**
 * 所有model的基类
 * @author chenas
 *2013年08月11日
 */
@Entity
public class BaseModel {

//主键
public long id; @Id
@GeneratedValue
@Override
public long getId() {
return id;
} @Override
public void setId(long id) {
this.id = id;
}
}
@Entity(name="BUYER_USER")
public class BuyerUser extends BaseModel{ private String username;
private String password;
private long addrId;


public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public long getAddrId() {
return addrId;
}
public void setAddrId(long addrId) {
this.addrId = addrId;
}

}
@Entity(name="Shop_USER")
public class ShopUser extends BaseModel{ private String username;
private String password;
private long addrId;


public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public long getAddrId() {
return addrId;
}
public void setAddrId(long addrId) {
this.addrId = addrId;
}

}
hibernate.cfg.xml<mapping class="com.eshop.model.BuyerUser"/>
<mapping class="com.eshop.model.ShopUser"/>测试new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
结果生成的表只有basemodel一张,如下
求解释,还有能有什么办法用继承的方法使子类都有父类的属性,并在数据库中映射成数据库表?hibernate数据库javaentity

解决方案 »

  1.   

    把所有实体类的共同属性都写在BaseModel中,通过继承,这样就不用每个类都要把所有属性写一遍
      

  2.   

    你去看看hibernate帮助文档,里面有教你如何做继承映射的例子,注解是不能被继承的,你可以百度的,我用手机上的,真心不方便的,家里没网
      

  3.   

    谢谢,已经解决了。在父类加个注解即可,@MappedSuperclass
      

  4.   

    谢谢,已经解决了。在父类加个注解即可,@MappedSuperclass@MappedSuperclass不是真正的继承,他的意思仅仅是父类的属性(包括ID等配置)直接作用于该类的子类,换句话说,使用MappedSuperclass仅仅代表子类的共同配置一起放到了父类里面,所以,在这种情况下,子类之间对于hibernate来说实际上是没有关系的,不能进行多态查询(因为父类根本就不是@Entity)
    如果要做成真正的继承,只需要在父类上面加上
    @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS),这个继承策略自己看,TABLE_PER_CLASS就是你想要的一个子类一张表。这种继承方式是可以多态查询的。才是真正的继承。希望对你有用。