我已经在一对一Map中设置了两个实体,我试图在我的仓库中的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中查询join列的正确方法吗?
2条答案
按热度按时间7kqas0il1#
由于您没有在A中定义
id
的列名,因此列名将默认为id
。然后在类B中,您应该将referencedColumnName
更改为id
(或者您可以简单地跳过referencedColumnName
属性,因为它可以直接从OneToOne关系中的目标实体派生)字符串
在repository中,您需要使用
@Repository
annotation对其进行注解,以让Spring知道它应该被视为Repository Bean。型
或者直接使用SPeL,
型
wgxvkvu92#
在我的例子中,下面的@Query对我来说很有效。在'WHERE'之后,我使用了示例而不是仓库名称。基本上,我必须使用"b“而不是" b”。
第一个月