当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA-将列名和值作为参数传递

乌和畅
2023-03-14

我只是想知道如何在Spring Data JPA中将列名及其值传递给@Query注释。

基本上,列名是静态的,我们通常把每个列作为一个元素放在实体类中。但这里我想要一些不同的东西,这里列名将是动态的,我将把这个值作为参数传递给在存储库中定义的方法

表格-日历

列-id,PersonName,1,2,3......31

@Query("select c from Calendar c where :calendarDay=:value")
List<Calendar> getPersonName(@Param("calendarDay") String calendarDay, @Param("value") String value);

共有1个答案

巢宏富
2023-03-14

看看sping数据规格。您可以在那里找到您的解决方案
阅读文档您可以看到,如果Calendar是您的域(我会尝试为我的域找到一个不同的名称,在Java SE中已经有一个Calendar类),那么您可以使用类似上面的内容,

@Repository
public interface CalendarRepository extends JpaRepository<Calendar, Integer>, JpaSpecificationExecutor<Calendar> {
}


public class CalendarSpecification implements Specification<Calendar> {

    private String randomColumnName; // A varchar column.
    private String valueToSearchFor;

    public CalendarSpecification(String randomColumnName, String valueToSearchFor) {
        this.randomColumnName = randomColumnName;
        this.valueToSearchFor = valueToSearchFor;
    }

    @Override
    public Predicate toPredicate(Root<Calendar> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
        return builder.and(builder.equal(root.<String>get(this.randomColumnName), this.valueToSearchFor));
    }
}


@Service
public class CalendarService {

    @Autowired
    private CalendarRepository calendarRepository;

    public List<Calendar> findCustom(String randomColumnName, String valueToSearchFor) {
        CalendarSpecification cs = new CalendarSpecification(randomColumnName, valueToSearchFor);
        return calendarRepository.find(cs);
        // Or using lambda expression - without the need of CalendarSpecification class.
//      return calendarRepository.find((Root<ProductCategory> root, CriteriaQuery<?> query, CriteriaBuilder builder) -> {
//          return builder.and(builder.equal(root.<String>get(randomColumnName), valueToSearchFor));
//      });
    }
}
 类似资料:
  • 问题内容: 我有3类调用,和。 在我的课程中,我想要一个这样的方法: 因此,例如,我想: 如何将类名作为参数,并基于该类名从类名创建适当的对象? 问题答案: 使用反射是可能的。这里是给定的className(作为字符串传递)。此类将在内存中搜索(应该已经加载)。 作为字符串传递时要实例化的类的名称应 完全限定

  • 问题内容: 如何使用参数占位符将列名值作为SQL参数传递? 目标是使此工作正常进行: 是一个变量,它将存储 是(并且我没有成功将其作为参数传递) 是一个(我对此没有问题) 已经阅读并尝试了很多东西: 低于1不会引发任何错误,但不会带来任何数据 低于一投 低于一投 低于一投 低于1不会引发任何错误,但不会带来任何数据 低于1不会引发任何错误,但不会带来任何数据 低于1不会引发任何错误,但不会带来任何

  • 问题内容: 我在SQL表中有一些列,例如text_en,text_es,text_de。现在,我只想根据语言从一列中检索值。因此,我创建了一个sql字符串, 并在vb代码中使用了 sql,但是sql返回了该列的名称,而不是该列的值。我如何获得价值? 问题答案: 你也可以

  • 我有表emp列emp_name,emp_desc,emp_age,emp_country,emp_pincode。 我正在使用Spring数据Jpa进行数据库操作。 和EMP存储库。findAll();从emp表激发select*。 但我有如下要求 客户端应用程序将传递列名以在方法中选择作为参数,我只想获取Jpa而不是Findall()中的列名。 如何在Jpa中实现这一点?

  • 问题内容: 我正在创建一些存储过程来管理我的数据库。特别是,我想创建一个存储过程来编辑特定行的一列,但是我想通过将列名作为参数传递来做到这一点。 那就是我想做的 使用该参数,我找到了要编辑的特定行,并且我想使用该参数来仅编辑我想要的列。 正如我在其他主题上所读到的那样,我已经尝试使用或定义局部变量,但没有找到解决方案。 有什么帮助吗? 问题答案: 您将需要使用 动态SQL : 请注意,正如Paul

  • 问题内容: 我有大约六种通用但相当复杂的存储过程和函数,我想以一种更通用的方式使用它们。 理想情况下,我希望能够将表名作为参数传递给过程,因为当前它是硬编码的。 我所做的研究表明,我需要将过程中所有现有的SQL转换为使用动态SQL,以便从参数中拼接动态表名称,但是我想知道是否还有一种更简便的方法可以通过另一种方式引用该表? 例如: 如果是这样,如何从表名设置@MyTable变量? 我正在使用SQL