当前位置: 首页 > 知识库问答 >
问题:

没有为实体指定标识符

袁良弼
2023-03-14

我正在使用Spring Boot 1.5.10和Spring Boot starter数据jpa。我有一个暂存表和一个生产表,它们都有相同的结构,只是表名不同。列包括:

  • 复合键1
  • 复合键2
  • 复合键3
  • 列A
  • 列B
  • c列

我收到以下错误:

原因:org.hibernate.注释异常:没有为实体指定标识符:com.foo.bar.StagingTbl

我有一个复合主键,类定义为:

@Embeddable
public class MyId implements Serializable {

        private static final long serialVersionUID = -99999999L;

        protected String compKey1;
        protected String compKey2;
        protected String compKey3;

       // setters/getters
}

my Abstract class:

        @MappedSuperclass
        public abstract class MyAbstractClass implements Serializable {

            protected static final long serialVersionUID = 7749572933971565230L;
            protected MyId myId;
            protected int col_A;
            protected Date col_B;
            protected String col_C

            public MyAbstractClass (String compKey1, String compKey2, String compKey3) {
              super();
              this.myId = new MyId(compKey1, compKey2, compKey3);
           }

            @EmbeddedId
            public MyId myId() {
                return myId;
            }
            public void setMyId(MyId myId) {
                this.myId= myId;
            }
          // getters/setters for other properties
}

我的具体类:

@Entity
@Table(name = "STG_TABLE" , schema="MYSCEMA")
public class StagingTbl extends MyAbstractClass implements Serializable {

}

标识符应该来自我正在扩展的MyAbstractClass。我显然错过了一些愚蠢的事情。提前谢谢。

共有1个答案

百里胜泫
2023-03-14

您的错误是微不足道的:Hibernate仅在方法名称遵循JavaBeans约定时才会在方法上找到@EmbeddedId。

只需将getter更改为:

@EmbeddedId
public MyId getMyId() {
    return myId;
}
 类似资料: