【问题标题】:How to use part of composite key in JPA repository methods to fetch data?如何在 JPA 存储库方法中使用部分复合键来获取数据?
【发布时间】:2018-10-06 12:57:47
【问题描述】:

我有一个带有 EmbeddedId 的类 Application,并且 embbbedID 中的第二列是 forgein 键,并且与 offer 有多对一的关系。

@Entity
   public class Application implements Serializable{

private Integer id;

@EmbeddedId
private MyKey mykey;

private String resume;

@Enumerated(EnumType.STRING)
@NotNull
private ApplicationStatus applicationStatus;

    @Embeddable
public class MyKey implements Serializable{

    private static final long serialVersionUID = 1L;
    @NotNull
    private String emailId;
    @ManyToOne(fetch = FetchType.LAZY)
    @NotNull
    private Offer offer;

在 Offer 类映射中是在 jobTitle 上完成的。

 @Repository
interface ApplicationRepository extends JpaRepository <Application,MyKey>

{

List<Application> findAllByMyKey_Offer(String jobTitle);
}

尝试这个但没有成功... 我想获取有关特定 jobTitle 的所有应用程序。 我在 ApplicationRepository 类中的方法名称应该是什么。

【问题讨论】:

    标签: java spring spring-boot spring-data-jpa many-to-one


    【解决方案1】:

    您的方法名称错误,正确的是findAllByMykey_OfferfindAllByMykeyOffer,因为您的字段名为mykey。

    正如文档中提到的 https://docs.spring.io/spring-data/jpa/docs/2.1.0.RELEASE/reference/html/ 使用 List&lt;Application&gt; findAllByMykey_Offer(String jobTitle);List&lt;Application&gt; findAllByMykeyOffer(String jobTitle); 更好

    【讨论】:

    • 感谢您的回复。,这工作。如果我只想获取相应 jobTitle 的所有 emailId,我的方法名称应该是什么。
    【解决方案2】:

    使用复合键,您的字段名称应包含嵌入 id 的字段名称。在你的情况下,它会是这样的(我还没有测试过)

    List<Application> findAllByMykeyOffer(String jobTitle);
    

    注意k 在这里是小写的,因为Application 类中的字段名为mykey,而不是myKey

    【讨论】:

    • 感谢您的回复。,这工作。如果我只想获取相应 jobTitle 的所有 emailId,我的方法名称应该是什么。
    猜你喜欢
    • 2018-09-01
    • 2021-09-20
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    相关资源
    最近更新 更多