2015-02-02 5 views
2

최대 절전 모드로 단일 테이블 상속을 만들려고하는데 오류가 발생하여 알아낼 수 없습니다.com.microsoft.sqlserver.jdbc.SQLServerException : 잘못된 열 이름 'DTYPE'

내 상속 클래스

@Entity 
@Table(name = "Vechicle") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="DTYPE") 
public class Vehicle_object implements Serializable { 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column 
private int vehicleid; 

@Column(name = "Vehiclename") 
private String vehiclename; 

public Vehicle_object() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

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

}

하위 클래스입니다.

@Entity 
public class TwoWheeler extends Vehicle_object { 

    private String handle; 

    public String getHandle() { 
     return handle; 
    } 

    public void setHandle(String handle) { 
     this.handle = handle; 
    } 

    public TwoWheeler() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

} 

두 번째 자녀.

@Entity 
public class FourWheeler extends Vehicle_object { 

    private String stearing; 

    public String getStearing() { 
     return stearing; 
    } 

    public void setStearing(String stearing) { 
     this.stearing = stearing; 
    } 

    public FourWheeler() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

} 

및 메인 클래스 방법.

try { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      session.beginTransaction(); 

      Vehicle_object object = new Vehicle_object(); 
      //object.setVehicleid(0); 
      object.setVehiclename("Car"); 

      TwoWheeler twoWheeler = new TwoWheeler(); 
      twoWheeler.setVehiclename("Apache"); 
      twoWheeler.setHandle("Apache handle"); 

      FourWheeler fourWheeler = new FourWheeler(); 
      fourWheeler.setStearing("Ford Car Stearing"); 
      fourWheeler.setVehiclename("FIGO FORD"); 

      session.save(object); 
      session.save(twoWheeler); 
      session.save(fourWheeler); 

      session.getTransaction().commit(); 
      session.clear(); 
      session.close(); 

     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 

이 예외가 발생합니다.

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'DTYPE'. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:306) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:186) 
    ... 23 more 

많은 검색을했지만 솔루션을 찾을 수 없습니다.

답변

0

말하기가 약간 이상하지만 예제는 변경없이 작동합니다.

나는 Hibernate 4.2 최종 버전을 사용하고 있었다. 나는 왜 그것이 그것을지지하지 않고 있는지 모른다.

버전을 3.6.10 Final로 변경했으며 작동합니다. 나는 Hibernate 4.2 Final이 그것을 해결할 수 없었던 이유를 모르지만 이것이 나의 해결책이었다.

0

상위 클래스에 판별 자 열을 추가 한 다음 각 하위 클래스에 판별 자 값을 추가해야합니다. 같은 데이터베이스 테이블에 대응하는 클래스가 여러 개 있기 때문에, Hibernate는 어떤 클래스가 어떤 클래스에 매핑 될지를 알아야한다.

그래서 : 당신이 자식 1의 인스턴스를 유지하는 경우가 데이터베이스에서 행을로드 할 때 있도록

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) 
public abstract class Parent { //bla } 


@Entity 
@DiscriminatorValue("child1") 
public class Child1 extends Parent { //bla } 

@Entity 
@DiscriminatorValue("child2") 
public class Child2 extends Parent { //bla } 

지금,이 인스턴스에 대한 데이터베이스 행, 열 type의 값 child1이있을 것이다, Hibernate는이 행에 기반을 둔 객체의 클래스가 Child1임을 안다.

+0

여전히 오류 : ( – Krishna

+0

데이터베이스에 이러한 열이 있습니까? – Tobb

+0

hibernate.hbm2ddl.auto를 만들어서 해당 필드를 만들지 않습니다. na. – Krishna