【问题标题】:CrudRepository: find by multiple related entitiesCrudRepository:由多个相关实体查找
【发布时间】:2014-07-31 13:27:21
【问题描述】:

我在 CrudRepository 中设计查询时遇到了一些问题。

我有两个实体,CourseOffering 和 Department(仅显示相关代码):

CourseOffering.java:

public class CourseOffering implements Serializable
{
    private Department department;

    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name = "DepartmentId", nullable = true)
    @JsonProperty
    public Department getDepartment()
    {
        return this.department;
    }

    public void setDepartment(Department department)
    {
        this.department = department;
    }
}

部门.java:

public class Department implements Serializable
{
    private Set<CourseOffering> courses;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "department")
    public Set<CourseOffering> getCourses() {
        return this.courses;
    }

    public void setCourses(Set<CourseOffering> courses) {
        this.courses = courses;
    }
}

以及相关的 CrudRepository:

CourseOfferingRepository.java:

import java.util.List;
import edu.ucdavis.dss.dw.entities.CourseOffering;
import org.springframework.data.repository.CrudRepository;

public interface CourseOfferingRepository extends CrudRepository<CourseOffering, Long>
{
    CourseOffering getOneByTermIdAndNumberAndDepartmentId(long termId, String number,
            long departmentId);

    List<CourseOffering> findByDepartmentCode(String deptCode);

    //List<CourseOffering> findAllByDepartmentCode(String deptCodes);

    List<CourseOffering> findByTermCode(String termCode);
}

CourseOfferingRepository 中未注释掉的三个函数按预期工作。我正在努力让第四个工作。

我想做的是能够返回部门代码是许多部门代码之一的所有 CourseOfferings。请注意,CourseOffering 表本身仅包含一个 department_id 整数,该整数引用 Department 表中的 ID,其中存储了实际的 deptCode。

如何让被注释掉的 CrudRepository 函数正常工作?或者换一种说法,“List findByDepartmentCode(String deptCode);”的复数形式是如何产生的?

提前感谢您提供的任何建议。

【问题讨论】:

  • findByDeptCodeIn(Collection&lt;String&gt; deptCodes) 做你想做的事吗?
  • 好的,谢谢!不知道最后的“In”位。
  • 我添加了评论作为答案:)

标签: java sql spring hibernate spring-data


【解决方案1】:

您需要将注释掉的代码更改为:

List&lt;CourseOffering&gt; findByDeptCodeIn(Collection&lt;String&gt; deptCodes)

查看this 部分文档,了解允许使用哪些其他关键字

【讨论】:

  • 只有Department类的关系时也可以使用吗? (我的意思是在CourseOffering 类中没有部门属性)。
  • @PhoneixS 我没试过,但我严重怀疑它会起作用
【解决方案2】:

正如 geoand 在 cmets 中指出的那样,答案是:

List<CourseOffering> findByDepartmentCodeIn(List<String> deptCodes);

谢谢geoand!

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多