在orm.xml中使用命名查询,获取错误没有为实体指定标识符

时间:2016-03-24 19:49:57

标签: jpa spring-data spring-data-jpa named-query

我试图将我的命名查询存储在我的应用程序之外。到目前为止,我所阅读的所有内容都说将查询放在orm.xml中。所以我已经这样做了,就像这样:

   <?xml version="1.0" encoding="UTF-8"?>
...   
    <entity class="com.blah.mapdb.repository.ResultRepository">
        <table name="ResultRepository.getMapForTarget" />
        <named-query name="getMapForTarget">
        <query>
                <![CDATA[
                Big giant query goes here
                </query>
        </named-query>
    </entity>
    </entity-mappings> 

但是,当我尝试启动我的应用程序时,出现错误。挖掘堆栈跟踪会给我这个错误:

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.blah.mapdb.repository.ResultRepository

这是我的存储库类:

package com.blah.mapdb.repository;
import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import com.blah.mapdb.model.*;

public interface ResultRepository extends CrudRepository<Result, Long> {
      @Query(name="getMapForTarget",nativeQuery=true)
    List<Result> getMapForTarget (@Param("p1") String d, @Param("p2") String t, @Param("p3") String c);
...
}

这里是Result类的相关位:

package com.blah.mapdb.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;


@Entity
public class Result {

    @Id
    private int id;
...
}

显然,结果类有一个Id定义。如果我在ResultRepository类中包含查询,一切正常。我不知道为什么我得到关于ResultRepository类的错误。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您的orm.xml

中有这一行
<entity class="com.blah.mapdb.repository.ResultRepository">

这似乎是错误的,你应该

<entity class="com.blah.mapdb.model.Result"> 

代替。此外,您的表名定义可能是错误的,您应该指定您的Result实体映射到的实际表名。