hibernate(和jdk8)可以';无法在表中找到列。。。但在jdk7中可以找到

hibernate(和jdk8)可以';无法在表中找到列。。。但在jdk7中可以找到,hibernate,tomcat,intellij-idea,jrebel,Hibernate,Tomcat,Intellij Idea,Jrebel,我在我的项目中使用了Hibernate和Oracle数据库 我有一个名为referetodo的对象,它引用了另一个表: @实体 @表(name=“refereto”) 公共类referetodo实现可序列化{ ... @JoinColumn(name=“NUM\u PROG\u ID”) @manytone(fetch=FetchType.LAZY) 私人AnagraficaDO anagrafica; ... } EDIT3:这是另一张表 @Entity @Table(name = "

我在我的项目中使用了Hibernate和Oracle数据库

我有一个名为
referetodo
的对象,它引用了另一个表:

@实体
@表(name=“refereto”)
公共类referetodo实现可序列化{
... 
@JoinColumn(name=“NUM\u PROG\u ID”)
@manytone(fetch=FetchType.LAZY)
私人AnagraficaDO anagrafica;
...
}
EDIT3:这是另一张表

 @Entity
 @Table(name = "ANAGRAFICA")
 @Indexed
 public class AnagraficaDO implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "NUM_PROG_ID")
    @Fields({ @Field(index = Index.YES, store = Store.YES) })
    private Long numProgId; 

    ... 
    }
当我在IntelliJ15.2中使用Tomcat 8启动项目时(但我在v14中也遇到了问题),我得到了以下错误:

Caused by: org.hibernate.MappingException: Unable to find column with logical name num_prog_id in table REFERTO
这只发生在IntelliJ中;如果我切换到Eclipse,或者如果我从独立的tomcat(生成WAR)运行项目,一切都很好

我也在使用JRebel,但我做了很多测试来禁用它,所以我不认为这涉及太多

显然,
num\u prog\u id
在表
refereto
和表
ANAGRAFICA
中都存在

编辑:一位同事向我建议,这个问题只会发生在java8上。如果我切换到java7,问题就会消失。我已经更新了问题的标题和主体

EDIT2:以下是DDL供参考

CREATE TABLE "REFERTO" 
   (    "ANNO_REFERTO" NUMBER(4,0), 
    "NUMERO_REFERTO" NUMBER(9,0), 
    "TIPO_REFERTO" VARCHAR2(8 BYTE), 
    "DATA_RICHIESTA" DATE, 
    "ANNO_DONAZIONE" NUMBER(4,0), 
    "NUMERO_UNITA" NUMBER(9,0), 
    "CODICE_PRODOTTO" VARCHAR2(8 BYTE), 
    "NUM_PROG_DON" NUMBER(6,0), 
    "NUM_PROG_PAZ" NUMBER(6,0), 
    "NUM_ESAMI_PREN" NUMBER(3,0), 
    "NUM_ESAMI_EFFET" NUMBER(3,0), 
    "CODICE_PATOLOGIA" VARCHAR2(8 BYTE), 
    "CODICE_TESTO" VARCHAR2(8 BYTE), 
    "REFERTO_STAMPATO" VARCHAR2(1 BYTE), 
    "SCARICATO_CONCERTO" VARCHAR2(1 BYTE), 
    "CATEGORIA_CONTATTO" VARCHAR2(8 BYTE), 
    "CUO" VARCHAR2(5 BYTE), 
    "VALIDITA" VARCHAR2(1 BYTE), 
    "OPER_VALIDITA" VARCHAR2(20 BYTE), 
    "DATA_VALIDITA" DATE, 
    "CUO_PROV" VARCHAR2(5 BYTE), 
    "ANNO_DONAZIONE_PROV" NUMBER(4,0), 
    "NUMERO_UNITA_PROV" NUMBER(9,0), 
    "REFERTO_SCARICATO" VARCHAR2(1 BYTE), 
    "STRID_DOCUMENTO_ESTERNO" VARCHAR2(30 BYTE), 
    "FLAG_CDA2" VARCHAR2(1 BYTE), 
    "ID_PRESIDIO" VARCHAR2(8 BYTE), 
    "CDA2_CONFIDENTIALITY_CODE" VARCHAR2(2 BYTE) DEFAULT '01', 
    "NUM_PROG_ID" NUMBER(16,0), 
    "NUM_PROG_ID_ALS" NUMBER(16,0), 
    "STORICIZZATO" NUMBER(1,0), 
    "ESAMI_STORICIZZATI" NUMBER(1,0)
    ) ;

知道发生了什么吗

提供DDL,请参考
表格。只是为了进行交叉验证。@Ambrish DDL posted。在会话工厂启动期间,实际上没有检查表列,在最近运行SQL时,您会看到关于列的错误
num_prog_id
是指逻辑名称,在hibernate中表示实体字段(或属性),而不是表列。因此,您还应该显示
AnagraficaDO
的映射,问题更可能出现在那里。我还要再次检查java7的差异,映射问题通常不是java版本特定的。我发现在Hibernate的一开始,它就试图检查表和列;即使在测试中也会发生这种情况:使用JDK1.8运行junit会失败,使用JDK1.7运行junit不会失败。如果可能有帮助的话,我也会为AnagraficaDO添加“相关”映射。好的,我在
AnagraficaDO
中没有看到任何内容,您也可以发布异常堆栈,不清楚hibernate到底在做什么。另外,您使用的是什么版本的hibernate?