Spring Data JPA:连接列上的FindBy

v1l68za4  于 2024-01-09  发布在  Spring
关注(0)|答案(2)|浏览(299)

我已经在一对一Map中设置了两个实体,我试图在我的仓库中的joincolumn上查询:

  1. @Entity
  2. @Table(name = "a")
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. @Data
  6. @EqualsAndHashCode(callSuper=false)
  7. public class A extends Auditable {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Long id;
  11. @Column(unique = true)
  12. @Size(min = 1, max = 100)
  13. private String name;
  14. }
  15. @Entity
  16. @Table(name = "b")
  17. @AllArgsConstructor
  18. @NoArgsConstructor
  19. @Data
  20. @EqualsAndHashCode(callSuper=false)
  21. public class B extends Auditable {
  22. @Id
  23. @GeneratedValue(strategy = GenerationType.IDENTITY)
  24. private Long id;
  25. @Column
  26. @Size(min = 1, max = 100)
  27. private String name;
  28. @OneToOne
  29. @JoinColumn(name="aId", referencedColumnName = "aId")
  30. private A aId;
  31. }

字符串
在我的BRepository.java中,我正在尝试这样做:

  1. @Component
  2. public interface BRepository extends JpaRepository<B, Long> {
  3. List<B> findAllBByA_aId(String aId);
  4. }


我得到以下错误:
No property a found for type B! Did you mean 'aId'?
这不是spring-data中查询join列的正确方法吗?

7kqas0il

7kqas0il1#

由于您没有在A中定义id的列名,因此列名将默认为id。然后在类B中,您应该将referencedColumnName更改为id(或者您可以简单地跳过referencedColumnName属性,因为它可以直接从OneToOne关系中的目标实体派生)

  1. @Entity
  2. @Table(name = "b")
  3. @AllArgsConstructor
  4. @NoArgsConstructor
  5. @Data
  6. @EqualsAndHashCode(callSuper=false)
  7. public class B extends Auditable {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Long id;
  11. @Column
  12. @Size(min = 1, max = 100)
  13. private String name;
  14. @OneToOne
  15. @JoinColumn(name="aId", referencedColumnName = "id")
  16. private A aId;
  17. }

字符串
在repository中,您需要使用@Repository annotation对其进行注解,以让Spring知道它应该被视为Repository Bean。

  1. @Repository
  2. public interface BRepository extends JpaRepository<B, Long> {
  3. @Query(value="select b from B b where B.aId.id=?1")
  4. List<B> findAllBByA_aId(String aId);
  5. }


或者直接使用SPeL,

  1. @Repository
  2. public interface BRepository extends JpaRepository<B, Long> {
  3. List<B> findAllByaIdId(String aId);
  4. }

展开查看全部
wgxvkvu9

wgxvkvu92#

在我的例子中,下面的@Query对我来说很有效。在'WHERE'之后,我使用了示例而不是仓库名称。基本上,我必须使用"b“而不是" b”。
第一个月

相关问题