2

I'am using Hibernate framework 3.6.10.Final and MySql. I'am getting

Exception in thread "main" org.hibernate.MappingException: Cannot use identity column key generation with mapping for: org.koushik.javabrains.dto.Vehicle

when am including @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) in vehicle class. It's working fine with out this annotation.


Vehicle.java is my base class:

@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;
    }

}

My main class:

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();

    }
}

And when am running am getting following error:

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
  • 1
    have a look at this answer at SO Commented Apr 20, 2012 at 9:21

2 Answers 2

8

if you use TABLE_PER_CLASS, you have to use this ID generation strategy: @GeneratedValue(strategy = GenerationType.TABLE)

Sign up to request clarification or add additional context in comments.

Comments

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;
    }

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.