我使用Hibernate框架3.6.10.Final和MySql。我得到在MySql中使用註釋@Inheritance時發生Hibernate MappingException
Exception in thread "main" org.hibernate.MappingException: Cannot use identity column key generation with mapping for: 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;
}
}
TwoWheeler.java
:
@Entity
public class TwoWheeler extends Vehicle {
private String SteeringHandle;
public String getSteeringHandle() {
return SteeringHandle;
}
public void setSteeringHandle(String steeringHandle) {
SteeringHandle = steeringHandle;
}
}
FourWheeler.java
:
@Entity
public class FourWheeler extends Vehicle {
private String SteeringWheel;
public String getSteeringWheel() {
return SteeringWheel;
}
public void setSteeringWheel(String steeringHandle) {
SteeringWheel = steeringHandle;
}
}
我的主類:
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();
}
}
當我運行我收到以下錯誤:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Exception in thread "main" org.hibernate.MappingException: Cannot use identity column key generation with mapping for: org.koushik.javabrains.dto.Vehicle at org.hibernate.persister.entity.UnionSubclassEntityPersister.(UnionSubclassEntityPersister.java:90) at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:90) at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:286) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872) at org.koushik.hibernate.HibernateTest.main(HibernateTest.java:26)
看看這個答案在[SO](http://stackoverflow.com/questions/3154649/java-hibernate-jpa-inheritancetype-table-per-class-and- IDS) – 2012-04-20 09:21:29