我正在使用Spring Data JpaRepository
来查找与特定字段匹配的实体列表。请考虑以下代码段:
实体:
@Entity
@Table(name = "master")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Master implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
@Column(name = "id", nullable = false)
private Long Id;
@NotNull
@Column(name = "user_id", nullable = false)
private String userId;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id", referencedColumnName="id", insertable=false, updatable=false)
private Details Details;
Spring Data Custom JpaRepository:
public interface MasterRepository extends JpaRepository<Master,Long> {
List<Master> findMasterByUserId(String userId);
}
当我使用findBookingMasterByUserId
存储库方法查找具有特定用户ID的所有记录时,我获得了Master
实体的列表,但我没有获得具有Details
实体的id
实体{1}}作为其中的外键。
但是,当我使用findAll
开箱即用JpaRepository
方法时,我得到所有依赖实体,但使用自定义findMasterByUserId
存储库方法时,不会急切地获取子实体。
任何类型的帮助都将受到高度赞赏。谢谢!
答案 0 :(得分:1)
您的实体名称是&#34; Master&#34;不是&#34; booking_master&#34;。
将您的方法更改为:
List<Master> findByUserId(String userId);
有关JPA的查询创建机制的更多信息,请参阅下面的spring文档。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
可替换地,
@Query("SELECT m FROM Master m WHERE m.userId = :userId")
List<Master> findByUserId(@Param("userId") String userId);
从方法名称生成查询是一种查询生成策略,其中调用的查询是从查询方法的名称派生的。
我们可以按照以下规则创建使用此策略的查询方法:
答案 1 :(得分:1)
您可以在回购中使用@EntityGraph
来急切获取相关数据:
@EntityGraph(attributePaths = {"details"})
List<Master> findBookingMasterByUserId(String userId);
P.S。不要忘记改变&#39;详细信息&#39;字段到details
;