簡體   English   中英

如何通過嵌套表查找 object 的列表?

[英]How to find a list of an object by a nested table?

這樣的問題。 我有一個實體。 我需要通過選擇獲取該實體的對象列表,即通過 body_material 字段。 也就是說,例如,找到 body_material 索引為 2 的所有 BoatCards。我在 Java 中使用 Spring 執行此操作。我添加了 Dao、Service、Controller 和實體類

BoatBodyMaterial 實體:

@Entity
@Table(name = "boat_body_material")
@Data
@NoArgsConstructor
    public class BoatBodyMaterial {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "matcode")
        private Integer matcode;
    
        @Column(name = "matname")
        private String matname;
    
        @Column(name = "matnote")
        private String matnote;
    
    }

BoatCards 實體:

@Entity
@Table(name = "boat_cards")
@Data
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
    public class BoatCards {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "cardid")
        Long cardid;
    
        @Column(name = "reg_num")
        String regNum;
    
        @Column(name = "tiket_num")
        String tiketNum;
    
        @Column(name = "boat_name")
        String boatName;
    
        @ManyToOne
        @JoinColumn(name = "boat_type")
        BoatTypes boatType;
    
        @Column(name = "boat_year")
        String boatYear;
    
        @Column(name = "boat_vin")
        String boatVin;
    
        @Column(name = "parking_place")
        String parkingPlace;
    
        @ManyToOne
        @JoinColumn(name = "sa_category")
        SaCategory saCategory;
    
        @Column(name = "boat_length")
        String boatLength;
    
        @Column(name = "boat_width")
        String boatWidth;
    
        @Column(name = "boat_height")
        String boatHeight;
    
        @ManyToOne
        @JoinColumn(name = "body_material")
        BoatBodyMaterial bodyMaterial;
    
        @Column(name = "boat_payload")
        Long boatPayload;
    
        @Column(name = "passengers_num")
        Long passengersNum;
    
        @Column(name = "service_life")
        String serviceLife;
    
        @Column(name = "engine_num")
        Long engineNum;
    
        @ManyToOne
        @JoinColumn(name = "owner")
        PersonData owner;
    
        @ManyToOne
        @JoinColumn(name = "agent")
        PersonData agent;
    
        @Column(name = "note")
        String note;
    
    }

刀class:

public interface BoatCardsDao extends JpaRepository<BoatCards, Integer> {

    @Query(value = "SELECT * from gims.boat_body_material where matcode = 1", nativeQuery = true)
    BoatBodyMaterial findByBodyMaterial ();

    List<BoatCards> findAllByBodyMaterial(BoatBodyMaterial list);
}

客服class:

public List<BoatCards> getAllByMaterial() {
        BoatBodyMaterial matcodeFromTable = boatCardsDao.findByBodyMaterial();

        List<BoatCards> boatCards = boatCardsDao.findAllByBodyMaterial(matcodeFromTable);
        return boatCards;
    }

Controller class:

@GetMapping(path="/get")
    public List<BoatCards> get() {

        return boatCardsService.getAllByMaterial();
    }

我得到錯誤:

2023-01-26T10:33:20.193+03:00 ERROR 20852 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.Object[]] to type [by.compit.gimsshd.model.BoatBodyMaterial] for value '{1, metal, produce from metal}'] with root cause

我解決這個問題! 謝謝!

public interface BoatCardsDao extends JpaRepository<BoatCards, Integer> {

    List<BoatCards> findAllByBodyMaterialMatcode(Integer bodyMaterial);


}

嘗試這樣的事情:

public interface BoatCardsDao extends JpaRepository<BoatCards, Integer> {

    @Query(value = "SELECT card FROM BoatCards card"
            + " JOIN card.bodyMaterial mat"
            + " WHERE mat.matcode = :matcode")
    List<BoatCards> findAllByBodyMaterial(@Param("matcode") int matcode);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM