0

@Id または @Column 属性のないサブクラス Entity があります。

しかし、私のサブクラスエンティティは次のように @IdClass を持っています

@Entity
@Table(name = "Employee")
@IdClass(EmployeeEntityPK.class)
public class EmployeeEntity extends AbstractEntity {

    @Override
    public void setName(String name) {
            super.setName(name);
    }
    @Override
    public void setLocation(String location) {
        super.setLocation(location);
    }
    @Override
    public void setEmpId(Integer empId) {
        super.setEmpId(empId);
    }
}

プロジェクトをデプロイしようとすると。休止状態から例外が発生しています

Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547) [rt.jar:1.6.0_17]
at java.util.ArrayList.get(ArrayList.java:322) [rt.jar:1.6.0_17]
at org.hibernate.cfg.AnnotationBinder.getUniqueIdPropertyFromBaseClass(AnnotationBinder.java:2576)
at org.hibernate.cfg.AnnotationBinder.isIdClassPkOfTheAssociatedEntity(AnnotationBinder.java:925)
at org.hibernate.cfg.AnnotationBinder.mapAsIdClass(AnnotationBinder.java:824)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:671)

完全な例外はhttp://pastebin.com/SnhQ1ZVQにあります

Hibernate は、存在しないエンティティから @Id クラスを見つけようとしています。

この問題を解決するにはどうすればよいですか。

私のスーパークラスは次のとおりです

@MappedSuperclass
public class AbstractEntity implements Serializable {
    @Id
    @Column(name = "empId")
    private Integer empId;

    @Column(name = "Name")
    private String name;

    @Column(name = "LOCATION")
    private String location;
    public Integer getEmpId() {
            return empId;
    }
    //along with other getter setters
   }
4

1 に答える 1

0

複数の列を持つ主キーがある場合、Pk として使用するクラスで通常の @Id プロパティを使用します。Id-Class には @Embeddable の注釈が付けられています...

例:

実在物:

@Entity
public class Foo extends AbstractEntity implements Serializable {
    private static final long serialVersionUID = 1;

    @EmbeddedId
    private FooPK id;

    //Getter, Setter...

}

埋め込み ID:

@Embeddable
public class FooPK implements Serializable {
    private static final long serialVersionUID = 1;

    private Integer firstId;
    private Integer SecondId;

    public FavoritenPK() {
    }

    // Setter, Getter...

}

編集: @Id を MappedSuperclass に入れるのに問題がありました。@Id-Property を Mapped-Superclass に入れないようにしてください。

于 2013-11-05T09:38:48.817 に答える