【问题标题】:Implement query in Spring JPA在 Spring JPA 中实现查询
【发布时间】:2018-09-27 05:13:04
【问题描述】:

我有一个问题。

Select *
from table Temp
where (sender = :sender And reciever=:reciever)OR(sender = :reciever And reciever=:sender).

我们可以在 JPQL 中编写它的等效查询吗? 我不想为此编写本机查询。需要编写一个自定义函数,它将在内部生成一个查询。例如:使用 findBy something

【问题讨论】:

  • 您可以将其写入本机查询,例如 @Query("select u from User u") Stream findAllByCustomQueryAndStream();
  • 该表的实体在哪里?因为在你知道之前没有人能告诉你答案,因为 JPQL 使用类/字段名

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


【解决方案1】:

您可以像下面这样编写本机查询:

@Query(value="Select * from table Temp where (sender = :sender And reciever=:reciever)OR(sender = :reciever And reciever=:sender)", nativeQuery=true)
public List<Temp> getMatching(@Param("sender") String sender, @Param("reciever") String reciever);

【讨论】:

  • 我不想为此编写本机查询。需要编写一个将在内部生成查询的自定义函数。例如:使用 findBy something
【解决方案2】:

在这个查询中没有什么奇怪的,你可以做一些简单的事情(虽然你没有发布任何实体,所以我不得不猜测字段)

@Query("select t from Temp t where (t.sender = :sender and t.reciever=:reciever) OR (t.sender = :reciever and t.reciever=:sender)")
public List<Temp> methodName(@Param("sender") String sender, @Param("reciever") String reciever);

【讨论】:

    【解决方案3】:

    EntityManager em

    public List<Temp> findBySenderReceiver(Sender sender, Receiver receiver) {    
        String jpql = "FROM Temp t WHERE (t.sender = :sender AND t.receiver = :receiver) OR (t.sender = :receiver AND t.receiver = :sender)";
    
        return em.createQuery(sql, Temp.class)
                .setParameter("sender", sender)
                .setParameter("receiver", receiver)
                .getResultList(); //or single result as you want
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2017-09-25
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2019-07-01
      • 2020-03-05
      • 1970-01-01
      相关资源
      最近更新 更多