hibernate(和jdk8)可以';无法在表中找到列。。。但在jdk7中可以找到
我在我的项目中使用了Hibernate和Oracle数据库 我有一个名为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 = "
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?