createQuery期间的java.lang.AbstractMethodError

时间:2016-10-14 13:05:58

标签: java hibernate jpa

我正在尝试通过this answer.中的示例来检索我的数据库中的结果列表。但是,我不断收到以下错误:

java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.createQuery(Ljava/lang/String;Ljava/lang/Class;)Ljavax/persistence/TypedQuery;

这是我的代码,表示我如何称呼它:

@Entity
@Table(name = "MY_TABLE")
public class CoolsEntity implements Serializable {

    @Id
    @Column(name = "ID", columnDefinition = "Decimal(10,0)")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;

    @Column(name = "COOL_GUY_NAME")
    private String name;

    public String getId() {
        return id;
    }

    public void setId(final String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name= name;
    }
}

以下代码会生成错误:

final String sql = "select c from CoolsEntity c";
final TypedQuery<CoolsEntity> query = em.createQuery(sql, CoolsEntity.class);
final List<CoolsEntity> results = query.getResultList();
return results;

但是,如果我这样做,我可以看到结果:

final String sql = "select c from CoolsEntity c";
final Query query = em.createQuery(sql);
@SuppressWarnings("unchecked")
final List<CoolsEntity> results = query.getResultList();
return results;

所有对em的引用都是通过此包导入的:

import javax.persistence.EntityManager

上面的两个查询不应该生成相同的结果吗?我是否错过了对List接口的强制转换,以允许它在类型化查询中工作?

2 个答案:

答案 0 :(得分:3)

当应用程序尝试调用抽象方法时,会抛出AbstractMethodError异常 你有很多Hibernate和JPA版本。

TypedQuery中引入了

JPA 2.0,Hibernate自3.5.X

以来实现了此规范

Suggesstion:使用Hibernate版本3.6.3(或更高版本)的实现。

答案 1 :(得分:0)

您可能正在使用两个不同版本的界面EntityManagerImpl和实施$myCode = 1; $sth = $db->prepare("INSERT INTO tblCodes (myCode) VALUES (CAST(CAST(:myCode AS varchar) AS INTEGER))"); $sth->bindParam(':myCode', $myCode, PDO::PARAM_INT); $sth->execute();