我在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,我的表模型已经有了这个列,并且这个服务用于在没有继承的情况下正常工作。 任何想法我想念什么?
答案 0 :(得分:0)
也许,如果它确实包含BODY列,你应该检查你的VEHICLE表的定义。该错误表明它没有这样的列。也许您需要重新创建表或手动更新表定义以包含该列。如果您在hibernate配置或persistence.xml中使用hibernate属性hbm.ddl.auto,请将其设置为UPDATE以更新架构。