字段列表中的单表继承和Unknwon列

时间:2015-10-15 13:17:04

标签: mysql hibernate inheritance

我在Hibernate和MySQL中遇到单表继承问题。 我的代码很简单:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="VEHICLE_TYPE")
@Table(name="VEHICLE")
public abstract class Vehicle {

  @Id
  @Column(name="VEHICLE_ID")
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private Long vehicleId;

  @Column(name="MAKE")
  private String make;

  @Column(name="MODEL")
  private String model;

  //setters and getters
}

@Entity
public class Car extends Vehicle {

  @Column(name="BODY")
  private String body;

//setters and getters
}

我也有获得所有车辆的服务:

@Override
public List<Car> getCars() {
    TypedQuery<Car> query = em.createQuery("SELECT c FROM Car c", Car.class);
    return query.getResultList();
}

当我运行应用程序并尝试获取汽车列表时,我得到以下控制台输出:

休眠:选择car0_.VEHICLE_ID为VEHICLE_2_6_,car0_.MAKE为MAKE3_6_,car0_.MODEL为MODEL4_6_,car0_.BODY为BODY7_6_来自VEHICLE car0_其中car0_.VEHICLE_TYPE ='Car'

警告:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL错误:1054,SQLState:42S22 错误:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - '字段列表'中的未知列'car0_.BODY'

Hovever,我的表模型已经有了这个列,并且这个服务用于在没有继承的情况下正常工作。 任何想法我想念什么?

1 个答案:

答案 0 :(得分:0)

也许,如果它确实包含BODY列,你应该检查你的VEHICLE表的定义。该错误表明它没有这样的列。也许您需要重新创建表或手动更新表定义以包含该列。如果您在hibernate配置或persistence.xml中使用hibernate属性hbm.ddl.auto,请将其设置为UPDATE以更新架构。