我用SSH三大框架写的项目;实体类是用JPA注解标注的,还用到了复合主键;在查询的时候出现了如下错误,各位,小菜鸟在此求教了!2011-07-22 17:21:46,905 [http-8888-5] WARN  [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -104, SQLState: 42601
2011-07-22 17:21:46,905 [http-8888-5] ERROR [org.hibernate.util.JDBCExceptionReporter] - DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=coverage0_.status;overage0_.converage_;<space>, DRIVER=3.50.152
2011-07-22 17:21:46,905 [http-8888-5] WARN  [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -727, SQLState: 56098
2011-07-22 17:21:46,905 [http-8888-5] ERROR [org.hibernate.util.JDBCExceptionReporter] - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;coverage0_.status|overage0_.converage_|<space>, DRIVER=3.50.152
2011-07-22 17:21:46,905 [http-8888-5] WARN  [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -727, SQLState: 56098
2011-07-22 17:21:46,906 [http-8888-5] ERROR [org.hibernate.util.JDBCExceptionReporter] - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;coverage0_.status|overage0_.converage_|<space>, DRIVER=3.50.152
error2
org.hibernate.exception.SQLGrammarException: could not execute query
(省略)
Caused by: com.ibm.db2.jcc.b.nm: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=coverage0_.status;overage0_.converage_;<space>, DRIVER=3.50.152
(省略)

解决方案 »

  1.   

    你把执行执行的sql 或者将hql转化成sql 先放在查询分析器中执行下 看能正常执行不
      

  2.   


    在查询分析器下能正常执行。
    我“保存一条数据”,直接用框架的save()方法,也会报这样的错:
    2011-07-22 17:46:17,013 [http-8888-3] WARN  [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -104, SQLState: 42601
    2011-07-22 17:46:17,014 [http-8888-3] ERROR [org.hibernate.util.JDBCExceptionReporter] - DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=coverage_.status;coverage_.converage_;<space>, DRIVER=3.50.152
    2011-07-22 17:46:17,014 [http-8888-3] WARN  [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -727, SQLState: 56098
    2011-07-22 17:46:17,014 [http-8888-3] ERROR [org.hibernate.util.JDBCExceptionReporter] - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;coverage_.status|coverage_.converage_|<space>, DRIVER=3.50.152
    2011-07-22 17:46:17,014 [http-8888-3] WARN  [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -727, SQLState: 56098
    2011-07-22 17:46:17,014 [http-8888-3] ERROR [org.hibernate.util.JDBCExceptionReporter] - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;coverage_.status|coverage_.converage_|<space>, DRIVER=3.50.152
    org.hibernate.exception.SQLGrammarException: could not retrieve snapshot:
      

  3.   

    你是不是把SQL当HQL语句用了。把你代码贴出来看看,这样看不出什么来
      

  4.   

    在查询分析器下能正常执行。
    我“保存一条数据”,直接用框架的save()方法,也会报这样的错:你save是用的对象保存的 怎么也会报错
    org.hibernate.exception.SQLGrammarException: could not retrieve snapshot: 还是你sql语法有问题
    或者是hql转为sql时的问题  你先贴hql 和sql吧
      

  5.   

    save我用的是对象保存,木有sql或者hql。
      

  6.   

    把你的Bean JPA和相关代码贴出来,不认别人怎么分析啊~
      

  7.   

    如果 添加也是这种错误 说明你的数据库表和实体对象 之间的映射对应有问题
    即你的JPA写的有问题
      

  8.   

    额那各位看看我写的JPA这是Coverage实体类@Entity
    @Table(name = "T_COVERAGE")
    public class Coverage implements java.io.Serializable { private CoverageId id;
    private String converageName; @EmbeddedId
    @AttributeOverrides({
    @AttributeOverride(name = "coverageId", column = @Column(name = "COVERAGE_ID", nullable = false, length = 40)),
    @AttributeOverride(name = "risksId", column = @Column(name = "RISKS_ID", nullable = false, length = 40)) })
    public CoverageId getId() {
    return this.id;
    } @Column(name = "CONVERAGE_NAME", length = 40)
    public String getConverageName() {
    return converageName;
    }
    }
    这是Coverage联合主键类@Embeddable
    public class CoverageId implements java.io.Serializable { private String coverageId;
    private String risksId; @Column(name = "COVERAGE_ID", nullable = false, length = 40)
    public String getCoverageId() {
    return this.coverageId;
    } @Column(name = "RISKS_ID", nullable = false, length = 40)
    public String getRisksId() {
    return this.risksId;
    } public boolean equals(Object other) {
    if ((this == other))
    return true;
    if ((other == null))
    return false;
    if (!(other instanceof CoverageId))
    return false;
    CoverageId castOther = (CoverageId) other; return ((this.getCoverageId() == castOther.getCoverageId()) || (this
    .getCoverageId() != null && castOther.getCoverageId() != null && this
    .getCoverageId().equals(castOther.getCoverageId())))
    && ((this.getRisksId() == castOther.getRisksId()) || (this
    .getRisksId() != null && castOther.getRisksId() != null && this
    .getRisksId().equals(castOther.getRisksId())));
    } public int hashCode() {
    int result = 17; result = 37* result
    + (getCoverageId() == null ? 0 : this.getCoverageId()
    .hashCode());
    result = 37 * result
    + (getRisksId() == null ? 0 : this.getRisksId().hashCode());
    return result;
    }}
      

  9.   

    换了种实现方式,采用spring的jdbcTemplate实现,则不会出现上述错误。具体原因还有待探究