[英]Spring Data JPA: FindBy on Join Column
我已經在一對一映射中設置了兩個如下所示的實體,並且我正在嘗試在我的存儲庫中查詢如下所示的 joincolumn:
@Entity
@Table(name = "a")
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper=false)
public class A extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
@Size(min = 1, max = 100)
private String name;
}
@Entity
@Table(name = "b")
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper=false)
public class B extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Size(min = 1, max = 100)
private String name;
@OneToOne
@JoinColumn(name="aId", referencedColumnName = "aId")
private A aId;
}
在我的BRepository.java
,我試圖這樣做:
@Component
public interface BRepository extends JpaRepository<B, Long> {
List<B> findAllBByA_aId(String aId);
}
我收到以下錯誤:
No property a found for type B! Did you mean 'aId'?
這不是查詢 spring-data 中連接列的正確方法嗎?
由於您尚未在 A 中為id
定義列名,因此列名將默認為id
。 然后在 B 類中,您應該將referencedColumnName
更改為id
(否則您可以簡單地跳過referencedColumnName
屬性,因為它可以直接從 OneToOne 關系中的目標實體派生)
@Entity
@Table(name = "b")
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper=false)
public class B extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Size(min = 1, max = 100)
private String name;
@OneToOne
@JoinColumn(name="aId", referencedColumnName = "id")
private A aId;
}
在存儲庫中,您需要使用@Repository
批注對其進行注釋,以讓 Spring 知道它應該被視為存儲庫 Bean。
@Repository
public interface BRepository extends JpaRepository<B, Long> {
@Query(value="select b from B b where B.aId.id=?1")
List<B> findAllBByA_aId(String aId);
}
或者你可以直接使用 SPeL,
@Repository
public interface BRepository extends JpaRepository<B, Long> {
List<B> findAllByaIdId(String aId);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.