JPQL验证错误

时间:2014-09-03 08:59:10

标签: java spring hibernate jpa spring-data-jpa

如果我不编写自定义查询,@Autowired FirstnameRepository对象为null,因此我尝试编写自定义查询,但这会产生以下错误。

java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List FirstnameRepository.findByNation(Nation)!

由于查询对我来说是正确的,我认为它与我的类结构或不正确的注释有关。

FirstnameRepo

 public interface FirstnameRepository extends JpaRepository<Firstname, String>{

    @Query("SELECT fn FROM Firstname fn WHERE fn.nation = :nation")
    List<Firstname> findByNation(@Param("nation")Nation nation);
}

名字模型

@Entity
@Table(name = "Firstnames")
public class Firstname extends Name implements Serializable {
    private static final long serialVersionUID = 1L;

    @Basic(optional = false)
    @Column(name = "gender")
    private short gender;
    @JoinColumn(name = "nation", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Nation nation;

    public Firstname() {}      
}

由于还有一个Lastname模型类,我扩展了一个名为Name的类,以便将FirstnameLastname保存在同一个Map中。 Name在数据库中没有表,两个类只继承ID属性。

名称等级

@MappedSuperclass
public abstract class Name {
    @Id
    @Basic(optional = false)
    @Column(name = "name")
    private String name;

    public String getName() {
        return name;
    }

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

如果我评论findByNation()方法,服务器启动没有问题。我希望这就是您所需要的,服务器配置或多或少地从一个工作项目中复制,但是如果我应该包含一些东西让我知道。感谢

修改 问题是配置不正确。在再次测试之前我改变了很多东西,但似乎主要问题是web.xml中的错误版本。

2 个答案:

答案 0 :(得分:2)

即使这个问题很可能与Query本身有关,但在我的情况下是一个配置问题。以下是我检查过的一些事情

  • web.xml中的版本,它指定所使用的Servlet规范的版本 - SO Question
  • 确保加载数据库上下文(例如db-context.xml)

答案 1 :(得分:0)

您的查询格式不正确...您无法将此信息与#34; fn.nation = :nation&#34;如果Nation是一个实体,你应该使用表之间的连接来正常工作。

我建议你link