仅在运行HQL时遇到错误:
来自PermitApproval
即netbeans中的hibernate.xml文件。在postgres中运行查询(即select * from permitapproval)不会出现此类错误。 同时从HQL中的表中选择单个列也不会出现错误
e.g
从PermitApproval中选择permitno
从PermitApproval中选择permitrequest(permitrequest是另一个对象)
下面的PermitApproval的Hibernate模型:
@Entity
@Table(name = "permitapproval", schema = "excise2")
public class PermitApproval implements Serializable {
private Permitrequest permitrequest;
private Transactions transaction;
private Date validfrom;
private Date validto;
private String referencepermitno;
private Integer currentmonth;
private Integer currentyear;
private Modules module;
private String officeabbreviation;
private String finyear;
private Integer slno;
private String warehouseabbr;
private String permitno;
private Userlogin user;
private Timestamp entrydate;
private Date referencedate;
private ExportRoutes routes;
private StatesExcise statesexcise;
public PermitApproval(){
}
public PermitApproval(modelform.PermitApprovalForm permitapproval) {
if (permitapproval.getPermitrequest() == null) {
this.permitrequest = new Permitrequest();
} else {
this.permitrequest = new Permitrequest(permitapproval.getPermitrequest());
}
if (permitapproval.getTransaction()== null) {
this.transaction = new Transactions();
} else {
this.transaction = new Transactions(permitapproval.getTransaction());
}
if (permitapproval.getModule() == null) {
this.module = new Modules();
} else {
this.module = new Modules(permitapproval.getModule());
}
if (permitapproval.getUser() == null) {
this.user = new Userlogin();
} else {
this.user = new Userlogin(permitapproval.getUser());
}
if (permitapproval.getRoutes()== null) {
this.routes = new ExportRoutes();
} else {
this.routes = new ExportRoutes(permitapproval.getRoutes());
}
if (permitapproval.getStatesexcise()== null) {
this.statesexcise = new StatesExcise();
} else {
this.statesexcise = new StatesExcise(permitapproval.getStatesexcise());
}
this.currentmonth=permitapproval.getCurrentmonth();
this.currentyear=permitapproval.getCurrentyear();
this.slno=permitapproval.getSlno();
this.finyear=permitapproval.getFinyear();
this.permitno=permitapproval.getPermitno();
this.referencepermitno=permitapproval.getReferencepermitno();
this.warehouseabbr=permitapproval.getWarehouseabbr();
this.officeabbreviation=permitapproval.getOfficeabbreviation();
this.valid_from=permitapproval.getValid_from();
this.valid_to=permitapproval.getValid_to();
this.entry_date=permitapproval.getEntry_date();
this.reference_date=permitapproval.getReference_date();
}
@Id
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="applicationcode", referencedColumnName ="applicationcode" ,nullable=false)
public Permitrequest getPermitrequest() {
return permitrequest;
}
public void setPermitrequest(Permitrequest permitrequest) {
this.permitrequest = permitrequest;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="transactioncode", nullable=false)
public Transactions getTransaction() {
return transaction;
}
public void setTransaction(Transactions transaction) {
this.transaction = transaction;
}
@Column(name = "validfrom", nullable = false)
public Date getValidfrom() {
return validfrom;
}
public void setValidfrom(Date validfrom) {
this.validfrom = validfrom;
}
@Column(name = "validto", nullable = false)
public Date getValidto() {
return validto;
}
public void setValidto(Date validto) {
this.validto = validto;
}
@Column(name = "referencepermitno", nullable = false)
public String getReferencepermitno() {
return referencepermitno;
}
public void setReferencepermitno(String referencepermitno) {
this.referencepermitno = referencepermitno;
}
@Column(name = "currentmonth", nullable = false)
public Integer getCurrentmonth() {
return currentmonth;
}
public void setCurrentmonth(Integer currentmonth) {
this.currentmonth = currentmonth;
}
@Column(name = "currentyear", nullable = false)
public Integer getCurrentyear() {
return currentyear;
}
public void setCurrentyear(Integer currentyear) {
this.currentyear = currentyear;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="modulecode", nullable=false)
public Modules getModule() {
return module;
}
public void setModule(Modules module) {
this.module = module;
}
@Column(name = "finyear", nullable = false)
public String getFinyear() {
return finyear;
}
public void setFinyear(String finyear) {
this.finyear = finyear;
}
@Column(name = "slno", nullable = false)
public Integer getSlno() {
return slno;
}
public void setSlno(Integer slno) {
this.slno = slno;
}
@Column(name = "warehouseabbr", nullable = false)
public String getWarehouseabbr() {
return warehouseabbr;
}
public void setWarehouseabbr(String warehouseabbr) {
this.warehouseabbr = warehouseabbr;
}
@Column(name = "permitno", nullable = false)
public String getPermitno() {
return permitno;
}
public void setPermitno(String permitno) {
this.permitno = permitno;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="usercode", nullable=false)
public Userlogin getUser() {
return user;
}
public void setUser(Userlogin user) {
this.user = user;
}
@Column(name = "entrydate", nullable = false)
public Timestamp getEntrydate() {
return entrydate;
}
public void setEntrydate(Timestamp entrydate) {
this.entrydate = entrydate;
}
@Column(name = "officeabbreviation", nullable = false,length=4)
public String getOfficeabbreviation() {
return officeabbreviation;
}
public void setOfficeabbreviation(String officeabbreviation) {
this.officeabbreviation = officeabbreviation;
}
@Column(name = "referencedate", nullable = true)
public Date getReferencedate() {
return referencedate;
}
public void setReferencedate(Date referencedate) {
this.referencedate = referencedate;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="routecode", nullable=true)
public ExportRoutes getRoutes() {
return routes;
}
public void setRoutes(ExportRoutes routes) {
this.routes = routes;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="statesexcisecode", nullable=true)
public StatesExcise getStatesexcise() {
return statesexcise;
}
public void setStatesexcise(StatesExcise statesexcise) {
this.statesexcise = statesexcise;
}
private String valid_from;
private String valid_to;
private String entry_date;
private String reference_date;
@Transient
public String getValid_from() {
return valid_from;
}
public void setValid_from(String valid_from) {
this.valid_from = valid_from;
}
@Transient
public String getValid_to() {
return valid_to;
}
public void setValid_to(String valid_to) {
this.valid_to = valid_to;
}
@Transient
public String getEntry_date() {
return entry_date;
}
public void setEntry_date(String entry_date) {
this.entry_date = entry_date;
}
@Transient
public String getReference_date() {
return reference_date;
}
public void setReference_date(String reference_date) {
this.reference_date = reference_date;
}
}
注意:为PermitApproval中映射的所有内部表运行HQL工作正常 即来自模块,来自permitrequest,来自交易等
错误如下:
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:89)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:449)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:202)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:137)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4120)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:502)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:467)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:212)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:258)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1066)
at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:985)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:673)
at org.hibernate.type.EntityType.resolve(EntityType.java:489)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:170)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1114)
at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
at org.hibernate.loader.Loader.doQuery(Loader.java:920)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
at org.hibernate.loader.Loader.doList(Loader.java:2551)
at org.hibernate.loader.Loader.doList(Loader.java:2537)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)
at org.hibernate.loader.Loader.list(Loader.java:2362)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = smallint
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:80)
... 32 more
我已经多次重新检查每个列及其数据类型,无法确定原因在哪里:
运算符不存在:字符变化= smallint
使用以下内容:
Hibernate 4
Postgres 9.5