我目前正在尝试为我的一个实体类实现@NamedNativeQuery。我的项目使用Spring数据,我的数据库中有两个表:Pizza和Town(披萨的起源)。查询本身包括通过提供城镇名称来查找比萨饼。因此,查找town.name是否包含提供的参数(在我们的例子中是城镇名称的一部分)。很自然地,我有这样的事情:
@NamedNativeQueries({
@NamedNativeQuery(
name = "Pizza.findByTown",
query = "select p.* from pizza p join town t on p.town_id = t.id on where t.name like '%?1%'",
resultClass = Pizza.class
)
})
public class Pizza {
}
所以在我的PizzaRepository中,我添加了以下内容
public interface PizzaRepository extends JpaRepository<Pizza, Long>, QueryDslPredicateExecutor<Pizza> {
Pizza findByTown(final String townName)
似乎%不适用于命名查询。有没有解决这个问题?任何帮助将不胜感激。
感谢
[编辑]:我添加了带注释的类Town
@Entity
@Table(name = "Town")
public class Town {
@Id
@Column(name = "town_id")
private String townId;
@Column(name = "name", nullable = false)
private String name;
@Lob
@Column(name = "picture", nullable = false)
private byte[] picture;
}
答案 0 :(得分:1)
您可以尝试以下查询
select p.* from pizza p join town t on p.town_id = t.id on where t.name like :param_1"
然后在代码中,可以设置如下参数。
query.setParameter("param_1", "%"+param_value+"%");
答案 1 :(得分:0)
您是否真的需要此请求的本机查询。使用JPQL / HQL,使用findByTownContaining
会更容易:这会直接添加你的%。
见表2.2。 spring data jpa documentation http://static.springsource.org/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html