0

我目前正在尝试为我的一个实体类实现 @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;
}
4

2 回答 2

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+"%");

于 2013-07-12T09:36:53.317 回答
0

你真的需要这个请求的本机查询吗?使用 JPQL/HQL 会更容易使用findByTownContaining:这将直接添加您的 %. 见表 2.2。spring data jpa 文档http://static.springsource.org/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html上的方法名称中支持的关键字

于 2013-07-12T12:46:22.463 回答