如果我不编写自定义查询,@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
的类,以便将Firstname
和Lastname
保存在同一个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中的错误版本。
答案 0 :(得分:2)
即使这个问题很可能与Query本身有关,但在我的情况下是一个配置问题。以下是我检查过的一些事情
答案 1 :(得分:0)
您的查询格式不正确...您无法将此信息与#34; fn.nation = :nation
&#34;如果Nation是一个实体,你应该使用表之间的连接来正常工作。
我建议你link。