Jpa findAllBy *, использующий Long id вместо сущности - PullRequest
0 голосов
/ 04 июня 2018

Я просто не хочу делать:

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

Вместо этого я хочу сделать:

findAllByEntityAnd*(Long entityId, *)

Есть ли что-то, чего я упустил, чтобы достичь того, чего я хотел, или я просто не могу этого достичьнапрямую?

Спасибо за помощь ~

Когда я попробовал это, Spring попросил меня:

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 Ответ

0 голосов
/ 04 июня 2018

Попробуйте это

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