使用注释@Inheritance和MySql时的Hibernate MappingException

Ran*_*aul 2 mysql hibernate hibernate-mapping java-ee

我使用的是Hibernate框架3.6.10.Final和MySql.我正进入(状态

线程"main"org.hibernate.MappingException中的异常:无法使用身份列密钥生成和映射:org.koushik.javabrains.dto.Vehicle

什么时候包括@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)车辆类.这个注释工作得很好.


Vehicle.java 是我的基类:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

public class Vehicle 
{

    @Id
    @GeneratedValue
    private int vehicleId;
    private String vehicleName;
        public int getVehicleId() {
        return vehicleId;
    }

    public void setVehicleId(int vehicleId) {
        this.vehicleId = vehicleId;
    }

    public String getVehicleName() {
        return vehicleName;
    }

    public void setVehicleName(String vehicleName) {
        this.vehicleName = vehicleName;
    }

}
Run Code Online (Sandbox Code Playgroud)

TwoWheeler.java:

@Entity
public class TwoWheeler extends Vehicle {
    private String SteeringHandle;

    public String getSteeringHandle() {
        return SteeringHandle;
    }

    public void setSteeringHandle(String steeringHandle) {
        SteeringHandle = steeringHandle;
    }

}
Run Code Online (Sandbox Code Playgroud)

FourWheeler.java:

@Entity
public class FourWheeler extends Vehicle {
    private String SteeringWheel;

    public String getSteeringWheel() {
        return SteeringWheel;
    }

    public void setSteeringWheel(String steeringHandle) {
        SteeringWheel = steeringHandle;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的主要课程:

public class HibernateTest {
    public static void main(String[] args)
    {

        Vehicle vehicle = new Vehicle();
        vehicle.setVehicleName("audi"+(int)(Math.random() * 100) + 1);

        TwoWheeler bike = new TwoWheeler();
        bike.setVehicleName("bike");
        bike.setSteeringHandle("Bike SteeringHandle");

        FourWheeler car = new FourWheeler();
        car.setVehicleName("car");
        car.setSteeringWheel("Car SteeringHandle");

        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(vehicle);
        session.save(bike);
        session.save(car);
        session.getTransaction().commit();
        session.close();

    }
}
Run Code Online (Sandbox Code Playgroud)

当我正在运行时遇到以下错误:

SLF4J:无法加载类"org.slf4j.impl.StaticLoggerBinder".SLF4J:默认为无操作(NOP)记录器实现SLF4J:有关更多详细信息,请参阅http://www.slf4j.org/codes.html#StaticLoggerBinder.异常在线程"主要" org.hibernate.MappingException:不能使用标识列密钥生成与映射:在org.hibernate.persister.entity.UnionSubclassEntityPersister org.koushik.javabrains.dto.Vehicle(UnionSubclassEntityPersister.java:90)在org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:90)在org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:286)在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)在org.koushik.hibernate.HibernateTest.main(HibernateTest.java:26)

小智 8

如果使用TABLE_PER_CLASS,则必须使用此ID生成策略:@GeneratedValue(strategy = GenerationType.TABLE)