JPA @MappedSuperclass 没有为实体指定标识符



我正在使用带有spring-boot-starter-data-jpa的Spring-Boot 1.5.10。我有一个临时表和一个生产表,两者都具有相同的结构,只是表名称不同。列是:

  • compKey1
  • compKey2
  • compKey3
  • col_A
  • col_B
  • col_c

我收到以下错误:

由以下原因引起:org.hibernate.AnnotationException:未指定标识符 对于实体: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。我显然错过了一些愚蠢的东西。提前谢谢。

你的错误是微不足道的:Hibernate只有在方法的名称遵循Java Beans约定的情况下才能找到方法上的@EmbeddedId。

只需将您的吸气剂更改为:

@EmbeddedId
public MyId getMyId() {
    return myId;
}

相关内容

  • 没有找到相关文章

最新更新