2012-04-20 37 views
2

我使用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)

+1

看看这个答案在[SO](http://stackoverflow.com/questions/3154649/java-hibernate-jpa-inheritancetype-table-per-class-and- IDS) – 2012-04-20 09:21:29

回答

8

如果你使用TABLE_PER_CLASS,你必须使用这个ID生成策略:@生成值(策略 = GenerationType.TABLE)

0

Vehicle.java

@Entity 
@Table(name="vehicle") 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 

public class Vehicle 
{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.TABLE) 
    @Column(name="vehicle_id") 
    private int vehicleId; 
    @Column(name="vehicle_name") 
    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; 
    } 

}