代码之家  ›  专栏  ›  技术社区  ›  Hearen

jpa findallby*使用长id而不是实体

  •  0
  • Hearen  · 技术社区  · 7 年前

    我只是不想做:

    myEntity = findById(Long id)
    findAllByEntityAnd*(MyEntity myEntity, *)
    

    相反,我想做的是:

    findAllByEntityAnd*(Long entityId, *)
    

    有什么东西我错过了实现我想要的,或者我只是不能直接实现它?

    谢谢你的帮助~

    当我尝试的时候,春天提醒我:

    java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract java.util.List com.worksap.morphling.raptor.dump.thread.dao.ThreadDoRepository.findAllByDumpDoAndLocksWaitingContains(java.lang.Long,java.lang.String)!
    

    这是我的桌子供你参考:

    @Data
    @Builder
    @Entity
    @Table(name = "thread_info")
    @AllArgsConstructor
    @NoArgsConstructor
    public class ThreadDo implements Serializable {
        private static final long serialVersionUID = -1L;
        String name;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        @ManyToOne
        @JoinColumn(name = "thread_dump_id")
        @JsonIgnore
        private ThreadDumpDo dumpDo;
    
        ...
    }
    
    @Data
    @Builder
    @Entity
    @Table(name = "thread_dump")
    @AllArgsConstructor
    @NoArgsConstructor
    public class ThreadDumpDo implements Serializable {
        private static final long serialVersionUID = -1L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @OneToMany(
                mappedBy = "dumpDo",
                cascade = CascadeType.ALL,
                orphanRemoval = true
        )
        private List<ThreadDo> threadDoList;
    }
    

    然后我有一个 ThreadDoRepository 想找到 threadDos 直接这样:

    List<ThreadDo> findAllByDumpDoAndLocksWaitingContains(Long dumpId, String lockWaiting);
    

    我可以通过 @Query 如下所述,但我真的认为它很难看,因为它很容易解释(我想)。

    @Query(value = "select * from thread_info t where t.thread_dump_id = ?1 and t.locks_waiting like ?2",
                nativeQuery = true)
    List<ThreadDo> findAllByDumpDoAndLocksWaitingContains(Long dumpId, String lockWaiting);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   pvpkiran    7 年前

    试试这个

    List<ThreadDo> findAllByDumpDo_IdAndLocksWaitingContains(Long dumpId, String lockWaiting);