Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有@IdClass且无属性的JPA子类_Java_Hibernate_Jpa_Jboss7.x - Fatal编程技术网

Java 带有@IdClass且无属性的JPA子类

Java 带有@IdClass且无属性的JPA子类,java,hibernate,jpa,jboss7.x,Java,Hibernate,Jpa,Jboss7.x,我有一个子类实体,没有@Id或@Column属性 但是我的子类实体有@IdClass,如下所示 @Entity @Table(name = "Employee") @IdClass(EmployeeEntityPK.class) public class EmployeeEntity extends AbstractEntity { @Override public void setName(String name) { super.setName(na

我有一个子类实体,没有@Id或@Column属性

但是我的子类实体有@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);
    }
}
@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
   }
当我尝试部署我的项目时。我从hibernate得到异常

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)
完全异常在

Hibernate正在尝试从我的实体中查找@Id类,但实体不在那里

我如何解决这个问题

我的超级班如下

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

如果我有一个包含多个列的主键,我会在我想用作主键的类上使用普通的@Id属性。Id类用@Embeddeble注释

例如:

实体:

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

编辑:
我在MappedSuperclass中使用@Id时遇到问题。尽量不要将@Id属性放在映射的超类中

你的超类看起来怎么样?据我所知,层次结构中的所有类都应该共享相同的ID属性。我的超类AbstractEntity用@MappedSuperclass和ID列(name=“empId”)标记,其他列属性用getter和setter标记。。用super classI修改了问题我不确定你想做什么。Employee显然将从超类继承ID,并定义不同类型的IdClass。我看不出这将如何运作。也许你需要介绍另一门课?AbstractEntity(名称、位置)->AbstractEntityWithIdentifier->(ID、版本)。EmployeeEntity扩展了前者,而不是后者。