JPA:如何在`oneToMany`和`manyToMany`关系中搜索属性表达式?

时间:2018-04-21 10:19:10

标签: hibernate jpa spring-data-jpa

我想根据子搜索条件获取父对象数据。

User Entity类如下所示:

@Entity
@Table(name = "user")
public class User
{
    protected String usertId;
    protected Collection<Contact> contacts;

    @OneToMany
    @JoinColumn(name="user_id", referencedColumnName="user_id")
    public Collection<Contact> getContacts()
    {
        return contacts;
    }

    //getters & setters

}

及其子类

@Entity
@Table(name = "contact")
public class Contact
{
    protected String phoneNumber;
    protected String zipCode;


    //getters & setters

}

UserRepository类是:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    User findByZipCode(String zipCode);

}

我试图让所有用户基于例如邮政编码,但这给出了以下编译错误。

无效的派生查询!找不到类型User!

的属性zipCode

有些人可以帮我解决这个或任何有关如何使用子字段获取记录的示例教程

1 个答案:

答案 0 :(得分:1)

您正在zipCode实体中寻找User。虽然它与Contact实体有关。只需使用以下方法:

User findByContactsZipCode(String zipCode);

这意味着User.contacts.zipCode

然而,这是一种典型的方式,在某些情况下使用此方法会导致错误理解(假设您的User实体也具有contactsZipCode属性。为了防止出现此类问题,您可以使用_contactszipCode分开。

User findByContacts_ZipCode(String zipCode);

有关更多详细信息和示例,您可以从here

中读取JPA的属性表达式

我希望它有效:)