我试图将我的命名查询存储在我的应用程序之外。到目前为止,我所阅读的所有内容都说将查询放在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类的错误。我在这里缺少什么?
答案 0 :(得分:0)
您的orm.xml
:
<entity class="com.blah.mapdb.repository.ResultRepository">
这似乎是错误的,你应该
<entity class="com.blah.mapdb.model.Result">
代替。此外,您的表名定义可能是错误的,您应该指定您的Result
实体映射到的实际表名。