[英]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.