2012-04-20 10 views
2

私はHibernateフレームワーク3.6.10.FinalとMySqlを使用しています。 I'am車両クラスで@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)含めていたときに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

を得ます。この注釈はうまくいきます。


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) –

答えて

8

あなたがTABLE_PER_CLASSを使用している場合、あなたはこのID生成戦略を使用する必要があります@ GeneratedValue(戦略 = 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; 
    } 

} 
関連する問題